在进行列表渲染时,必须指定节点元素的key。key是虚拟DOM对象的唯一标识,在页面更新时发挥关键作用。
虚拟DOM和diff算法:
当页面中的状态发生变化时,框架(React/Vue)会根据页面生成新的虚拟DOM,通过diff算法与旧的虚拟DOM进行比较:
- 若旧虚拟DOM中可以找到与新虚拟DOM相同的key,则继续比较该节点下的内容,若内容相同,则复用旧真实DOM;若不同,则生成新真实DOM;
- 若旧虚拟DOM中未找到与新虚拟DOM相同的key,则直接生成新真实DOM。
通过虚拟DOM和diff算法,实现了DOM节点的复用,提高了更新渲染效率。
key的选择:
一般情况下,使用数据唯一标识作为key,如:id、学号、身份证好、手机号等。如果只是简单的展示数据,可以使用下标index作为key。
使用index作为key可能会引发的问题:
- 若对数据进行逆序添加、逆序删除等破坏顺序的操作,会导致非必要的DOM更新;
- 若结构中包含输入类DOM,会导致错误更新。