题目来源及自己的思路
- 加入了唯一的key的具体作用是什么?
- 在初次渲染列表的时候,key是否有优化的效果?
- key是在什么时候产生优化的效果的?
希望看到这个小问题,能促进思考。### 题目描述
相关代码
<ul>
<li v-for="(item, index) in itemList" key="index">{{item.name}}</li>
</ul>
希望看到这个小问题,能促进思考。### 题目描述
<ul>
<li v-for="(item, index) in itemList" key="index">{{item.name}}</li>
</ul>
简单说key值是浏览器 DOM 首次渲染的时候会用到。
也就是说你循环的数据首次渲染到页面上,数据也就会绑定到DOM上。
假如说 这个时候你操作的数据,使数据位置发生了变化,恰好这个时候如果你用了下标当key值的话。会出现key值的重叠,你会发现你取得值会跟绑定的dom上的值有不同。
解决办法,用一个唯一的值。比如说 后端返给你的id
这也是我理解的。不对的话 也希望大神们指出,相互学习
13 回答12.8k 阅读
7 回答2k 阅读
9 回答1.7k 阅读✓ 已解决
6 回答1k 阅读
3 回答1.1k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
1、加入key的作用
引入Vue的官网回答,大概意思就是说,对已经渲染的dom节点,在源列表数据部分变化的时候,不用全部重新渲染dom,只是重新渲染数据变化的部分。
2、在初次渲染列表的时候,key是否有优化的效果?
没有优化效果。
3、key是在什么时候产生优化的效果的?
key是在源数据发生改变的时候,如果有key,就能追踪到具体是哪一项或哪几项数据发生了改变,就能只更新改变数据对应的dom。如果你key不唯一的话,vue就很难精确的追踪到改变的数据是哪些了,这也是为什么key必须唯一的原因。
另外,最好不要用列表渲染的index去作为key使用,因为当源数据发生位置变换,比如说,第一项的数据挪到了第二项,但是你的key还是不变的,vue为了更新对视图,就必须整个dom重新渲染,等于说白白消耗了很多性能。所以把index当做key使用,是完全没有意义的。