v-for 中 key 值是否可以为 index 答案当然是不可以,举个例子,我们来看下面两个 vdom,从 num 值我们可以发现,新、旧两个 vdom 是两个顺序相反的数组生成的 vdom,安装正常的方式,应该是简单调换一下顺序,直接复用3个元素即可,而当我们以 index 作为 key 时,情况就不同了,由于 index 永远都是从 0 开始,...
vue中列表循环需加:key=“唯一标识”唯一标识可以是item里面id 等,因为vue组件高度复用增加Key可以标识组件的唯一性,为了更好地区别各个组件 key的作用主要是为了高效的更新虚拟DOM。但是我们不推荐使用index作为key! 总结:key的作用主要就是为了高效的更新虚拟DOM,使用key值,它会基于key的变化重新排列元素顺序,并且会...
v-for 中 key 值是否可以为 index 答案当然是不可以,举个例子,我们来看下面两个 vdom,从 num 值我们可以发现,新、旧两个 vdom 是两个顺序相反的数组生成的 vdom,安装正常的方式,应该是简单调换一下顺序,直接复用3个元素即可,而当我们以 index 作为 key 时,情况就不同了,由于 index 永远都是从 0 开始,...
如果存在key,则通过createKeyToOldIdx索引是否存在; 如果不存在key,则遍历剩余 oldCh,获取index;=> findIdxInOld 判断是否索引到 index 【情况1】没有索引到,说明无法复用老的,直接新建; 【情况2】索引到了,如果是相同的节点,直接移动; 【情况3】索引到了,只是key相同,但节点发生了变化,直接新建; --- ...
简介: 深入剖析Vue中v-for的使用及index作为key的弊端 列表渲染v-for 我们可以使用 v-for 指令基于一个数组来渲染一个列表。v-for 指令的值需要使用 item in items 形式的特殊语法,其中 items 是源数据的数组,而 item 是迭代项的别名,v-for 也支持使用可选的第二个参数表示当前项的位置索引。 data() { ...
先说答案,因为绑定key值是为了,渲染虚拟dom时用key作为标识,做到局部更新。 不使用index作为key是因为 列表更新时index对应也会改变,唯一标识发生变化,导致渲染时依然会整体渲染,比较浪费性能。 既然都说到这里了,那就上代码最直观的看一下,diff算法是怎么做到虚拟dom渲染。 以下是一个简单的示例: template部分 {...
目录 收起 key 的必要性 vnode(虚拟DOM) diff 算法 总结 问题:为什么不建议在 v-for 指令中使用 index 作为 key? <!-- 内容 --> key 的必要性 Vue 默认按照“就地更新”的策略来更新通过 v-for 渲染的元素列表。当数据项的顺序改变时,Vue 不会随之移动 DOM 元素的顺序,而是就地更新每个元素,确...
到目前为止,我们只真正研究了用 v-for 遍历数组。但是我们可以很容易地迭代对象的键值对。与访问元素的索引类似,我们必须向循环中添加另一个值。如果用单个参数循环对象的话将会循环所有项目。如果我们再添加一个参数,将会得到 item 和 key。如果添加第三个还可以访问 v-for 循环的 index。假设要遍历商品的每个...
在Vue中,我们经常会用到v-for指令来遍历数组或对象并渲染列表。而在使用v-for指令时,通常会需要给每个遍历的元素指定一个唯一的key值,以帮助Vue更高效地更新DOM。 在很多情况下,我们可能会倾向于使用index作为key值,因为index默认就是唯一的。但是,Vue官方不推荐使用index作为key值的原因主要有以下几点: ...
v-for 中 key 值是否可以为 index 答案当然是不可以,举个例子,我们来看下面两个 vdom,从 num 值我们可以发现,新、旧两个 vdom 是两个顺序相反的数组生成的 vdom,安装正常的方式,应该是简单调换一下顺序,直接复用3个元素即可,而当我们以 index 作为 key 时,情况就不同了,由于 index 永远都是从 0 开始,...