Vue中key的原理以及diff算法详解
Vue中key的原理以及diff算法
简介
Vue的key用于在虚拟DOM中标记节点,方便后面的diff对比算法进行对比,提升效率。
Vue的vm或者vc实例一共管理着3个DOM对象
分别他的模板对应的真实DOM、真实DOM的备份、以及重新生成的新的DOM,后两个可以看成是虚拟DOM,只要后面两个DOM的DOM树的叶子或者节点不一样(被指令操作虚拟DOM进行了修改),那么就会通过渲染函数render重新更新HTML页面上的真实DOM。
使用列表渲染时
会生成新的节点,这些节点不是一开始在模板当中写的,属于后来的DOM节点,所以需要特殊管理。
列表渲染新生成的DOM节点一般是一棵子DOM树
使用key可以记录这棵子树的根节点,diff差分算法就是根据从这个子树的根节点开始进行对比,判断DOM节点是否发生变化。
- 如果发现key不存在,直接创建新的子树。
- 如果key存在,则会对子树遍历。但是对于一些在HTML中的真实DOM中存在的内容,比如input框里面的内容,Vue是不知道的,因为Vue只有一开始真实DOM的备份,后面这个HTML页面上的真实DOM发生了什么变化Vue是不知道的。这就会导致真实DOM的一部分被替换掉,而另外一部分还是残留的老的真实DOM。
如果遍历容器时
使用index作为key,则会出现部分真实DOM残留的问题。实际开发中,一般使用独一无二的index作为key。
总结如下
- 最好使用每条数据的唯一标识作为key,比如id、手机号、身份证号、学号等唯一值
- 如果不存在对数组数据的逆序添加、逆序删除等破坏顺序的操作,仅用于渲染列表,使用index作为key是没有问题的

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Vue自定义表单验证(rule,value,callback)使用详解
这篇文章主要介绍了Vue自定义表单验证(rule,value,callback)使用详解,今天我们讲一讲自定义验证规则具体使用场景和它的三个参数意思和使用,需要的朋友可以参考下2023-07-07
详解windows下vue-cli及webpack 构建网站(三)使用组件
本篇文章主要介绍了详解windows下vue-cli及webpack 构建网站(三)使用组件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-06-06


最新评论