最近在项目中,用了v-for来动态添加组件,然后删除中间的组件时,删除掉的都是最后一个组件,插入顺序也很奇怪。
后来发现Vue用 v-for 更新已渲染过的元素列表时,它默认用“就地复用”策略。如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。(其实,真正的原因是Virtual DOM 使用Diff算法实现)
也就是说他会根据key值去判断某个值是否修改,如果修改,则重新渲染这一项,否则复用之前的元素;所以不推荐index(即数组的下标)来作为key。
网友评论