一、key在Vue中的作用
key 是虚拟 dom 的标识
,是 Vue 内部用的属性,不会在真实 dom 中显示。
当数据发生变化时,Vue 会根据数据生成新的虚拟Dom
,再拿新、旧虚拟 Dom 进行对比。对比规则如下:
- 新、旧虚拟 Dom 找到相同的 key 时:
- 如果内容没变则直接使用旧节点。
- 如果内容变了则使用新数据生成Dom节点,并替换之前的真实Dom。
- 如果旧虚拟 Dom 中没找到新虚拟 Dom 中的 key 时:
- 创建新真实 Dom,并渲染到页面。
二、用什么作 key
-
用唯一标识作 key,譬如id。
旧的真实 Dom 可以直接使用。
-
如果不会打乱数据的顺序则可以用 index 作 key。 从数组头部插入新元素,新、旧虚拟 Dom 中都有
key="0"
的节点,文本内容不一样,新文本替换旧文本。输入类型的 Dom 节点内容一样,直接使用旧元素,这时就出错了。 -
key 如果没写,Vue 默认用 index 作 key。
三、如果使用 index 作 key,特殊情况下会导致一些问题:
- 从数组头部增加、删除数据时,会造成效率问题。
- 如果有输入类型的元素,会导致数据错误。