Skip to content
本页目录

key 索引

说到 key 就要了解 diff 算法,简单来说,diff 算法是一种通过同层的树节点进行比较的高效算法。 key 是虚拟 dom 节点(vnode)的唯一标识,它是 diff 算法比较节点时的比较对象。

循环中使用

  • 未设置 keyVue 会采用就地复地原则:最小化节点移动,并且会尝试尽最大程度在适当的地方对相同类型的节点做 patch 或者 reuse
  • 设置可 key:对比 key 进行复用,无用的旧节点将被移除。

刷新组件

因为存在 key 时, vue 的更新是按照 key 值进行判断的,当我们改变 key 的值,会触发该 dom 重新渲染。
使用场景:比如在 element-ui 中,动态设置的表格列可能存在缓存,我们可以给其设置 key 并在需要更新时动态改变该值。

为什么不该使用 index 作为 key

举个例子,一个循环的列表中,以 index 作为了索引,当其中某条记录被移除时,其后面的 index 值会被减一,那么其后的所有 key 值都被改变,从而触发了 dom 更新。

所以我们需要对每个记录做一个唯一的 key 值,比如接口返回的记录 id,若不存在,可在获取数据时给其创建一个唯一的随机 id