在vue进行循环的数组或者对象中,使用了v-for进行dom元素的渲染。
当数组或对象中的值发生变化时,可能会使dom元素重新渲染。是否会重新渲染和我们设置的key属性对应的值有关
合理的设置key属性的值可以有效的提高页面的的更新效率
首先,vue使用了diff算法来进行dom元素的更新,
diff算法:
diff算法可以看作是一种对比算法,对比的对象是新旧虚拟Dom。顾名思义,diff算法可以找到新旧虚拟Dom之间的差异,但diff算法中其实并不是只有对比虚拟Dom,还有根据对比后的结果更新真实Dom。 差异算法可以看作是一种对比算法,对比的对象是新旧虚拟DOM.顾名思义,Dff算法可以找到新旧虚拟DOM之间的差异,但diff算法中其实并不是只有对比虚拟DOM,还有根据对比后的结果更新真实DOM。
简单来说就是:v-for循环的列表数据或对象数据修改的时候,diff算法会根据key值去判断某个值是否修改,如果修改,则重新渲染这一项,否则复用之前的元素;
而当我们使用了index作为key值时,我们向循环的数据插入新的数据时,索引可能发生改变,(在首,中插入数据),那么就会导致vue重新渲染下标发生了变化的数据
而我们如果使用列表数据中的某个唯一值的字段作为key值,那么我们向循环的数据插入新的数据时,只会重新渲染新加的数据。
参考:v-for 一定要绑定key值吗?为什么不建议使用index?_现在的v-for能不写key吗-CSDN博客
为什么不推荐用index当做v-for中的key值呢? - 知乎 (zhihu.com)
总结:我们只做数据的渲染就可以使用index作为key值,并没有什么问题,但是涉及到数据的操作,比如添加或删除数据的时候就不要用了
标签:index,渲染,绑定,算法,key,diff,数据 From: https://www.cnblogs.com/123-hh/p/18143743