在列表渲染时使用key属性
相信大多数Vue开发者接触到key属性的时候是使用v-for进行列表渲染的时候,如果不使用key属性,Vue会产生警告,那么在这个时候key属性的作用是什么呢?
假设Vue实例的data属性中有一个叫numbers的变量,它的值是[1, 2, 3, 7, 8, 9]
:
<div v-for="num in numbers">
{{num}}
</div>
这种情况下应当是渲染了6个<div>
元素,其中的内容分别对应numbers中6个数字,此时如果numbers变成了[0, 1, 2, 3, 7, 8, 9]
,即在数组头部插入了一个数字0,在没有key属性的情况下,渲染输出的更新步骤是这样的:
原先内容为1的<div>
元素内容变成0,原先内容为2的<div>
元素内容变成1,……以此类推,最后新增一个<div>
元素,内容为9。
在这种情况下,Vue会通过改变原来元素的内容和增加/减少元素来完成这个改变,因为没有key属性,Vue无法跟踪每个节点,只能通过这样的方法来完成变更。
让我们对以上代码进行一个小修改:
<div v-for="(num, index) in numbers" :key="index">
{{num}}
</div>
我这里用index变量,根据列表渲染的规则,它实际上对应了数组中每个元素的索引,这样做的好处是它可以使得每个元素的key值都不同,这是很重要的,如果我们要利用key属性的优点,必须保证同一父元素的所有子元素有不同的key属性。
此时如果numbers从[1, 2, 3, 7, 8, 9]
变成了[0, 1, 2, 3, 7, 8, 9]
,渲染输出的更新步骤就变化了:
新增一个<div>
元素,它的内容为0,并将它插入原先内容为1的元素之前。
在有了key属性之后,Vue会记住元素们的顺序,并根据这个顺序在适当的位置插入/删除元素来完成更新,这种方法比没有key属性时的就地复用策略效率更高。
总体来说,当使用列表渲染时,永远添加key属性,这样可以提高列表渲染的效率,提高了页面的性能。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/114775.html<