VUE v-for中的:key详解

不在v-for的标签中加入key时。




  
  
  
  
  关于v-for的key


  
  • {{item.name}}

在我们选中李四并添加赵六后,被选中的人变成了张三。

VUE v-for中的:key详解_第1张图片

VUE v-for中的:key详解_第2张图片

再来看v-for有key的情况:




  
  
  
  
  关于v-for的key


  
  • {{item.name}}

VUE v-for中的:key详解_第3张图片

VUE v-for中的:key详解_第4张图片

在我们选中李四并添加赵六后,被选中的人还是 李四,没有变化。

这是因为vue底层的Diff算法导致的。diff算法的处理方法是对操作前后的dom树同一层的节点进行对比,一层一层对比,如下图:

VUE v-for中的:key详解_第5张图片

当某一层有很多相同的节点时,也就是列表节点时,Diff算法的更新过程默认情况下也是遵循以上原则。

比如一下这个情况:

VUE v-for中的:key详解_第6张图片

我们希望可以在B和C之间加一个F,Diff算法默认执行起来是这样的:

VUE v-for中的:key详解_第7张图片

即把C更新成F,D更新成C,E更新成D,最后再插入E,是不是很没有效率?

所以我们需要使用key来给每个节点做一个唯一标识,Diff算法就可以正确的识别此节点,找到正确的位置区插入新的节点。

VUE v-for中的:key详解_第8张图片

vue中列表循环需加:key=“唯一标识” 唯一标识可以是item里面id index等,因为vue组件高度复用增加Key可以标识组件的唯一性,为了更好地区别各个组件 key的作用主要是为了高效的更新虚拟DOM。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

你可能感兴趣的:(VUE v-for中的:key详解)