vue大坑:v-for的key以及props传参不当导致的闭包

这篇具有很好参考价值的文章主要介绍了vue大坑:v-for的key以及props传参不当导致的闭包。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 为什么props传参在模版中使用没问题,在函数中使用不变化
  1. 场景
    当我们点击上方的月份时,会改变下方加载的卡片信息
    vue大坑:v-for的key以及props传参不当导致的闭包

  2. 代码:

    父组件:

    		<div
    			v-for="(item, index) in vocalStore.getCardMonthData"
    			:key="index"
    		>
    			<DetailCard :data="item" />
    		</div>
    

    字组件

    <div 
    	@click="jumpUrl(data.name || '')">
    	大致模版
    </div>
    
    const { data } = defineProps<{
    	data: IvocalData
    }>()
    
    function jumpUrl() {
    	jumpData.find(a => {
    		if (a.name === val) window.location.href = a.url
    	})
    }
    
  3. 流程:

  • 当我们点击月份的时候,会加载对应月份的子组件卡片
  • 当我们点击某一个子组件的时候,会判断是否跳转
  1. 问题:

    • 如果我们设置key为index,会导致我们点击月份的时候,子组件并没有销毁然后重新构建,而是由于设置了key,导致每次点击月份会判断子组件没有变化(diff)。
    • 然后这时我们子组件的方法jumpUrl()就会一直存在在内存中,然后我们每次点击触发jumpUrl()的时候会闭包:
      • 因为vue3中的setup中返回了jumpUrl()这个方法
      • 并且jumpUrl()使用了setup中的data属性
      • 最后再次重复调用jumpUrl()
    • 导致我们更新了月份,但是点击子组件的时候,判断的却是其他月份的数据(第一次加载的月份)
  2. 解决方法:
    * 使用传参的方式,就是在调用函数的时候把参数传递进去,避免的闭包
    * 重新规划v-for的key值文章来源地址https://www.toymoban.com/news/detail-412693.html

到了这里,关于vue大坑:v-for的key以及props传参不当导致的闭包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue - 动态绑定ref(使用变量)以及获取方式,解决v-for循环嵌套自定义子组件时无法this.$refs.xx找到动态组件的情况(详细示例教程)适合 vue.js nuxt.js uniapp

    正常情况,我们需要在vue中获得某个dom或者组件,我们会通过绑定 ref 然后通过绑定后的名字来获取这个dom 。 但是,如果我们在v-for中绑定ref的话,那么这个ref就会存在多个,比如我们点击事件让对应的显示/隐藏的话,我们很难找到这个对应的元素。 那么,这时我们需要动

    2024年02月13日
    浏览(39)
  • vue中的v-for循环

    如果是一个变量,那么保存的是对象中的属性值 如果是两个变量,那么第一个变量保存的是属性值,第二个变量保存的是属性名 如果是三个变量,那么第一个变量保存的是属性值,第二个变量保存的是属性名,第三个变量保存的是下标 v-for=\\\"o1 in obj\\\"          o1:属性值 v-f

    2024年01月17日
    浏览(31)
  • Vue-16、Vue列表渲染(v-for的使用)

    1、vue遍历数组 也可以这样写 2、遍历对象

    2024年01月21日
    浏览(34)
  • Vue 常用指令 v-for 列表循环

    v-for:根据数据生成列表结构,并且是响应式的,可以十分便捷的操作列表结构了。 至于是什么样的列表,就看你指令使用的位置了, 列表的生成依赖于数据,所以先去定义数据。 它结合的类型挺多的,数组,对象,迭代器,字符串,最常使用的是数组。这里使用数组来演

    2024年02月14日
    浏览(30)
  • Vue3 v-for点击切换样式

    在div上绑定   :class= { 名称(class/id):a === key 值 }   并 添加 一个 点击事件 声明 const  a  = ref(0) ;  css写我们要的样式(就是我们绑定的class名称) 点击事件里写    i.value = key 值

    2024年02月13日
    浏览(35)
  • GuLi商城-前端基础Vue指令v-for

    2024年02月12日
    浏览(26)
  • Vue中v-for的9种使用案例

            以下代码的意思是:循环渲染一个包含三个元素的列表,每个元素的值分别为“第一项”、“第二项”和“第三项”。         以下代码的意思是:循环渲染一个包含三个属性的对象,每个属性的键值对分别为“name: 张三”、“age: 18”和“gender: 男”。    

    2024年02月03日
    浏览(32)
  • vue3【列表渲染】v-for 详细介绍(vue中的“循环”)

    在本文之前已经有文章简单概要介绍过vue中的渲染,点击帮你快速复习👏👏,包括 条件渲染 和 列表渲染 。 二者同样重要,但是 对于项目而言,使用更多的是列表渲染,主要表现为“循环”。 下面让我们继续深入地了解列表渲染的相关内容吧~👏👏👏 我们可以使用 v-f

    2024年02月22日
    浏览(35)
  • vue+Element项目中v-for循环+表单验证

    表单验证的时候: prop改为 “:prop”,形式为\\\'input.\\\' + index + \\\'.ptock\\\' \\\'input.\\\' + index + \\\'.ptock’就是数据结构与数据 每一个循环中的都需要加:rules :prop=\\\"\\\'input.\\\' + index + \\\'.ptock\\\'\\\"的写法也可以是 模板字符串  

    2024年02月15日
    浏览(29)
  • Vue2路由:手动配置使用路由&路由嵌套、路由动态传参(:参数,query、props)、编程式导航(back、go)、导航守卫

    过了一遍vue2的router,整理一下小结 目录 一、前端路由的概念与原理 1.1 什么是路由 1.2 路由的工作方式 二、vue-router的基本使用 2.1 安装、配置、使用router 2.2 redirect重定向 三、嵌套路由 3.1 声明子路由的规则 3.2 默认子路由 四、动态路由 4.1 动态路由的概念 4.2 动态路由取参方

    2024年02月05日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包