vue滥用index当做key的影响

42 阅读1分钟

vue滥用index当做key的影响

大家可能在开始学习vue的时候都知道使用v-for的时候尽量不要用index当做key,但是为什么呢?

相信很多人都有这个习惯,其实看官方文档的时候,vue已经告诉我们要用一个特殊的值当做key,但是还是很习惯会用index当做key,key涉及到一些vue的虚拟dom的diff算法,目的就是减少真实DOM的操作,提升性能

今天不探究diff算法的问题,只是讲下index当做key的影响

1、有以下代码,渲染一个列表,用了index当做key

<div v-for="(item, index) in tableData" :key="index" class="table-row">
    ...内容
</div>

image.png

image.png

2、点击查看下单人姓名之后的效果

image.png

image.png

奇怪的是我第二页的下单人姓名自动解密了,并且展示的是第一页那项的下单人姓名,代码逻辑在翻到第二页的时候把第二页的数据给了表格组件,由于用的是index当做key,vue不会去重复渲染这个表格,只会把需要渲染的地方重新渲染,就把我的带眼睛的隐私组件保留了下来,解决这个问题,只需要让我的隐私组件不保留,每一个小眼睛部分都是独一无二的,那么就不能用index当做key,这样问题就解决了

<div v-for="item in tableData" :key="item.third_oid" class="table-row">
    ...内容
</div>