key
的重要性因为vue
循环时不是将dom
元素循环创造, 而是一个dom
元素重复使用, 而它的diff
机制是同层元素进行对比; 以下图:vue
如上图: 对比的原则是 父节点 A
与 父节点 A
对比,下面的子节点与子节点进行对比. 若是右边的A
节点 变为 B
节点, 可是B
下面的子元素仍是B1, B2, B3
. Vue
的diff
机制会删除 A
节点, 同时连带下面的子节点也会删除, 并创造B
节点, 再依次建立下面的B1, B2, B3
子节点;数组
若是咱们如图所示, B1,B2,B3
是循环出来的相同dom
, 在B1
和B2
中间加入一个B4
节点, 若是没有设置key
属性时, Vue
的机制是将B2
改变成B4
, 将B3
改变成B2
, 在建立一个B3
节点; 若是有key
属性时, 直接在B1
与B2
之间插入B4
节点就能够了;dom
并且索引并不推荐它做为key
, 咱们在进行对数组的数据操做中, 每个数组内的元素的索引是在不断变化的,所以并不能很绝对的表明一个节点;this
v-for
与 v-if
不要同时出如今一个节点上建议使用 computed
过滤掉不要显示的数据后再作循环code
this.$forceUpdate()
强制更新组件