vue key值问题

在Vue项目中遇到批量删除功能的实现问题,发现删除元素后子组件并未正确更新。问题出在使用index作为key值,导致子组件复用而不是销毁。删除操作实际上从末尾开始,复用的组件保留了旧数据,引发渲染错误。为确保key值的唯一性,应避免使用index,推荐绑定数据中的唯一id。Vue的key主要用在虚拟DOM的diff算法中,用于区分新旧节点,带key时会基于key值进行元素排列,移除无key的元素,还能触发过渡效果和组件生命周期。因此,正确使用key对于避免数据渲染问题至关重要。
摘要由CSDN通过智能技术生成

问题

在前几天写项目的时候有一个批量删除的需求,批量删除肯定是少表里list列表和v-for。根据data里的list数据对子组件进行v-for,对list进行选择删除操作,按理说list里的数据被删除以后,子组件列表也会重新遍历。就在这时出现了问题,该被删除的item确实已经不在了,但是数据渲染出现了错误。从父组件传过去的值并没有问题,问题出在了子组件data中的数据。比如我删除了列表中的第一个元素,第一个子组件被删以后,第二个组件会自动排到第一位上。并且第一个子组件的data并不重新渲染,仍然是之前的数据。显而易见,第一个子组件没有被销毁,而是被复用了。因为样式是其他人写的,我是后来接收的这个页面,并没有特别仔细的看。在困扰了我一天多以后,终于让我发现了,问题就出在这个key值上啊。原来在v-for时绑定了key值为index...。那删除的操作根本就不是选中哪个元素删除哪个元素,而是我们删除几个都是从最后往前删,前面的子组件一直被复用,父组件传过去的值会根据传过去的值变化而变化,但是data里的数据没有触发他们变化,还是会保持之前的数据,就和更新以后的数据不符。尤其是在自组建的钩子函数中有数据初始化的情况如果key值被复用了更会出现这种情况。我们应该保证key值与数据的唯一确认,一般如果数据里有id,绑定id也是好的。接下来我们就来具体说一说key值,先来看看vue官方对key值的说法:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值