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

news/2025/3/14 1:52:31/
  • 为什么props传参在模版中使用没问题,在函数中使用不变化
  1. 场景
    当我们点击上方的月份时,会改变下方加载的卡片信息
    在这里插入图片描述

  2. 代码:

    父组件:

    		<divv-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值


http://www.ppmy.cn/news/46478.html

相关文章

Verilog | 轮询仲裁

仲裁 当多个源和用户需要共享同一资源时&#xff0c;需要某种仲裁形式&#xff0c;使得所有用户基于一定的规则或算法得到获取或访问共享资源的机会。 仲裁方案 严格优先级轮询 根据优先级的差异&#xff0c;用户访问共享资源的机会也不同。低优先级的用户可能时钟无法得到资…

有哪些功能强大,但是很小众的Python库呢?

Python生态系统中有很多小众但非常强大的库&#xff0c;一般&#xff0c;通俗的规律就是&#xff0c;越是高端&#xff0c;越小众&#xff0c;但是&#xff0c;高端不代表难学&#xff0c;只要理论到了&#xff0c;用起来照样嗖嗖的&#xff0c;以下是一些参考的高端小众库&…

Windows XP设置Outlook电子邮箱

一、问题描述 在Windows XP操作系统中进行Outlook电子邮箱的设置。 二、具体步骤 1、点击“开始”&#xff0c;找到“电子邮件&#xff08;Outlook Express&#xff09;并点击&#xff1a; 2、点击“设置邮件账户”。 3、输入自己的姓名&#xff0c;点击“下一步”。 4、…

数据结构总结——Java

1 链表(Linked List) 1.1 单项链表(Singly Linked List) 1.1.1 图例 1.1.2 Java实现 public class ListNode {// 保存值int val;// 保存指针ListNode next;// 构造函数们public ListNode() {}public ListNode(int val) {this.val val;}public ListNode(int val, ListNode n…

阿里P7晒工资条,看完好扎心了……

前几天&#xff0c;有位老粉私信我&#xff0c;说看到某95后学弟晒出阿里P7的工资单&#xff0c;他是真酸了…想狠补下技术&#xff0c;努力冲一把大厂。 为了帮到他&#xff0c;也为了大家能在最短的时间内做面试复习&#xff0c;我把软件测试面试系列都汇总在这一篇文章了。 …

神经网络参数初始化方法 | 深度学习

为什么需要初始化神经网络参数&#xff1f; 神经网络参数的初始值会影响网络的拟合能力和优化效果&#xff0c;如果初始值过大或过小&#xff0c;可能会使得模型的梯度爆炸或梯度消失&#xff0c;导致网络无法收敛或训练效率低下。因此&#xff0c;合适的参数初始化可以提高模…

[ARM+Linux] 基于全志h616外设开发笔记

修改用户密码 配置网络 nmcli dev wifi 命令扫描周围WIFI热点 nmcli dev wifi connect xxx password xxx 命令连接WiFi 查看ip地址的指令&#xff1a; ifconfig ip addr show wlan0 SSH登录 这是企业开发调试必用方式&#xff0c;比串口来说不用接线&#xff0c;前提是接入网络…

TCP/UDP协议 (详解)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…