简单明了的告诉你v-for中为啥不用能index做key的值

博客探讨了在Vue中使用v-for循环时,为何key不建议设置为index。文章指出,key作为DOM节点的唯一标识,当列表动态插入新元素时,使用index可能导致不必要的大量DOM更新,增加内存消耗。尽管渲染结果可能正确,但如果有输入框等交互元素,可能会导致显示错误。因此,建议避免在代码中使用key=index。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在之前的项目中,因为自己的学艺不精,一直没有注意这个问题,也为了图方便,key一直等于循环的index,但是并没有出现问题(虽然只是表面上没有)

后面知道了这个点了解以后,恍然大悟

下面我们聊聊为啥key不推荐用index吧

首先我们要知道vue虚拟dom的使用的算法是diff算法,就是原地比较复用,然key是每个节点的唯一标识,就好比名字一般,独一无二(打比方,我当然知道世界上面有很多重名的,嘿嘿)

现在假如你有一个列表,这里你使用v-for了,但是你使用key=index,渲染在页面中,后你想插入一个新元素进去,然后你插入方式是顺次插入,你没有发现问题

( 这个数字代表你key的index值,字母代表内容,因为我要暂时错误,所以不使用id)

这里虚拟更新完,虚拟dom会去比较新旧dom之间的差异,如果旧的没有变化就不更新复用,新出的来就更新上去,这里明显更新4  D,然后现在我们不顺次更新,我们倒过来,插入在上面

下面就是dom展示

 插入以后,因为你key等于index,所以第一个肯定一直为1呗,但是上次1的内容是a,这边更新以后变成了插入的D,a的key变成了2,现在,按照原有diff算法更新,我们还能像上面一样只更新一个dom节点吗?

显然不能,这里一比较,之前的1-a变成了2-a ,2-b变成了3-b,明显全部都变了,这里就要全部都更新,这样对内存进行了一个浪费与消耗,白白更新了一堆垃圾!!

说到这里,虽然对内存是有所消耗,但是并不是不能用,至少渲染结果是对的,但是如果你的dom中带有像输入框之内的盒子,就连渲染结果都是错的,他们会错位

所以key=index还是不要再出现在各位的代码中了吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹏在哪儿呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值