0
点赞
收藏
分享

微信扫一扫

vue初学(学习笔记)------v-for以及key原理(虚拟dom对比算法理解)

闲鱼不咸_99f1 2022-05-05 阅读 23

1.在vue中使用最多的是v-for指令,基本上vue的各种项目中都少不了v-for。那么v-for一般都遍历些什么数据呢?
2.v-for遍历数组【这个是用的最多的】这里我使用的是html来进行演示在这里插入图片描述结果如上:在这里插入图片描述
这里的item就是数组的value,index就是value相对应的key这里强烈建议使用v-for指令的时候一定要绑定key,因为后面key会讲到虚拟dom对比算法----》对此遍历数组到此就结束了;
3.v-for遍历对象【用的还是比较多】
在这里插入图片描述结果如上:在这里插入图片描述
这里的item就是对象的value,index就是对象的key。-------》到此v-for遍历对象到此结束
4.v-for遍历字符串【用的比较少】
在这里插入图片描述结果如下:
在这里插入图片描述
这里的char就是遍历出来的字符串,index可以看成数组的下标。对此v-for遍历字符串到此结束。
5.v-for遍历指定出现次数【用的很少】
在这里插入图片描述结果如上:在这里插入图片描述
到此v-for循环次数到此结束:
1.v-for中的key介绍
vue3中key的详细介绍【官方文档】

-这里使用一个小案例在这里插入图片描述
在这里插入图片描述
页面如图:这个时候我们将输入框前面的文字复制到输入框中,然后在添加一个数据在这里插入图片描述在这里插入图片描述
这里出现了所谓的数据错乱。如果要解决就要了解所谓的虚拟dom对比算法实在不懂就百度吧
在这里插入图片描述
1.这里用简单的语句说说虚拟dom对比算法流程:当遍历data里面有数据的时候,就会在内存中产生一个虚拟dom对象,然后数据遍历完,虚拟dom产生完成后就会转化为真实dom,然后添加一个新的数据,产生一个新的虚拟dom对象,然后二个新旧的对象产生对比,因为要进行对元素复用,提高程序的健壮性,新的虚拟对象通过key来找到旧的虚拟对象中的元素来看是否能够复用,如图(右边通过key查找左边的key相同的元素是否相同),不同就直接转换为真实dom对象,相同就直接复用旧的dom对象,因为是用的index,没有使用数据的唯一标识(图中使用的是id),导致右边 li中的老刘与左边的张三不同,于是乎,vue就直接产生一个新的dom对象,但是input中的元素一摸一样,于是乎出现了如上图右边的数据错乱【老师总结语言:

特殊情况下index会导致数据错乱
原因是data中数据会现在内存中
构建虚拟dom然后生成在转换为真实dom,
然后在添加一个数据的话还是使用index的话
就又会在内存中构建虚拟dom,但是这个时候就会使用虚拟dom对比算法
通过index对比后会导致文本可能不一样导致复用失败,导致数据错乱
这个时候就要使用数据的唯一标识,这个时候所有的key都是唯一的,
虚拟dom对比算法就能一一对应,且能够数据复用,数据不会错乱

2.解决方案:**将key绑定为数据的唯一标识符(如图中的id)**结果如下图在这里插入图片描述
3. 虚拟domkey的作用:
key是虚拟dom对象的表示,当状态中数据发生变化时,Vue会根据【新数据】生成【新的虚拟dom】,随后vue进行【新虚拟dom】与【旧的xunidom】差异对比,
比较规则如下:
2.对比规则:
2.1.旧虚拟dom找到了与新虚拟dom相同的key:
2.1.a.若虚拟dom中内容没有改变,直接使用之前的真实dom
2.1.b.若虚拟dom中内容变了,则生成新的真实dom,随后替换掉页面中之前的真实dom
2.2.旧虚拟dom中未找到与新虚拟dom相同的key创建新的真实dom,随后渲染到页面
3.用index作为key可能会引发的问题:
3.1.若对数据进行:逆序添加,逆序上出等破坏顺序操作
会产生没有必要的真实dom更新====》界面效果没问题,但效率低
3.2.如果结构中还包含输入的dom会产生错误的真实dom更新===》界面有问题
4.开发中如何选择key?:
1.最好使用每条数据的唯一标识作为key,比如id,手机号,身份证号,学号等唯一值
2.如果不存在对数据的逆序添加,逆序删除等破坏顺序操作,使用于渲染列表用于展示,
使用index作为key是没有问题的

举报

相关推荐

0 条评论