key 索引
说到 key
就要了解 diff
算法,简单来说,diff
算法是一种通过同层的树节点进行比较的高效算法。 key
是虚拟 dom
节点(vnode
)的唯一标识,它是 diff
算法比较节点时的比较对象。
循环中使用
- 未设置
key
:Vue
会采用就地复地原则:最小化节点移动,并且会尝试尽最大程度在适当的地方对相同类型的节点做patch
或者reuse
- 设置可
key
:对比key
进行复用,无用的旧节点将被移除。
刷新组件
因为存在 key
时, vue
的更新是按照 key
值进行判断的,当我们改变 key
的值,会触发该 dom
重新渲染。
使用场景:比如在 element-ui
中,动态设置的表格列可能存在缓存,我们可以给其设置 key
并在需要更新时动态改变该值。
为什么不该使用 index 作为 key
举个例子,一个循环的列表中,以 index
作为了索引,当其中某条记录被移除时,其后面的 index
值会被减一,那么其后的所有 key
值都被改变,从而触发了 dom
更新。
所以我们需要对每个记录做一个唯一的 key
值,比如接口返回的记录 id
,若不存在,可在获取数据时给其创建一个唯一的随机 id
。