1、react/vue中key的作用与原理
虚拟DOM中key的作用:
-
简单的说,key是虚拟DOM对象的标识,在更新显示时起着及其重要的作用。
-
详细的说,当状态中的数据发生变化时,react会根据【新数据】生成【新的虚拟DOM】,随后react进行【新虚拟DOM】与【旧虚拟DOM】的Diffing比较,比较规则如下:
-
旧虚拟DOM中找到了与新虚拟DOM相同的key:
-
(1)、若虚拟DOM中内容没变,直接使用之前的真实DOM;
(2)、若虚拟DOM中内容变了,则生成新的真实DOM,随后替换页面中之前的真实DOM -
旧虚拟DOM中未找到与新虚拟DOM相同的key:
-
根据数据创建新的真实DOM,随后渲染到页面
-
2、index做key可能引发的问题
-
用index作为key可能会引发的问题
-
a、若对数据进行:逆序添加、逆序删除等破坏顺序操作:
会产生没有必要的真实DOM更新 => 界面效果没问题,但效率低 -
b、如果结构中还包含输入类的DOM:
会产生错误DOM更新 => 界面有问题 -
注意!如果不存在对数据的逆序添加、逆序删除等破坏顺序的操作,仅用于渲染列表用于展示,使用index作为key是没有问题的。
-
-
开发中如何选择key?
最好使用每条数据的唯一标识作为key,比如id、手机号、身份证号、学号等唯一值。
3、index与id做key的对比示例
说明
在使用index作为key时,输入框(任何输入型的dom)内容明显发生了错误,小张的信息跑到小王的输入框里去了。这是因为,在添加小王之前,小张的输入框的key是小张的那一行< li >标签对应的index值(key = 0),在添加小王之后,小王那一行的< li >标签对应的index变成了0(key = 0),Diffing算法检测dom的最小粒度是html标签,检测到 li标签的小王的li标签key为0,就把之前小张的内容放到小王那一行去了。
原文链接:https://blog.csdn.net/Svik_zy/article/details/125053174