v-for中为什么加key


vue中列表循环需加:key="唯一标识" 唯一标识可以是item里面id index等,因为vue组件高度复用增加Key可以标识组件的唯一性,为了更好地区别各个组件 key的作用主要是为了高效的更新虚拟DOM
key可用来唯一标识组件元素,v-for 在更新已渲染过的元素列表是,它默认用“就地复用”策略(如顺序表的新增一个元素,将原来该位置及后面的元素都向后移动一位并覆盖),即假设我们给列表增加一条数据,整个列表都要重新渲染一遍。
核心思想:
1.vue更新已渲染过的元素时,默认使用就地复用策略(如果该元素dom未修改,则复用之前的元素,否则重新渲染这一项),
2. key的作用是唯一标识组件元素,辅助判断新旧vdom节点在逻辑上是不是同一个对象,是否有更新

vue是通过比对组件自身新旧vdom进行更新的。

key的作用是唯一标识组件元素,辅助判断新旧vdom节点在逻辑上是不是同一个对象。

比如说数组里插入了一项,这就是很经典的例子。当没有key时,在某个节点位置插入一个元素,vue会认为不是同一个虚拟dom,会进行更新。如果key唯一标志了组件元素就不回出现这种问题。

提高效率,如果我们给列表增加了一条数据,页面只渲染了这数据

当Vue用 v-for 正在更新已渲染过的元素列表是,它默认用“就地复用”策略。如果数据项的顺序被改变,Vue将不是移动DOM元素来匹配数据项的改变,而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。

我们都知道,Vue很大的一个特点就是双向数据绑定,数据一旦改变,那么页面就渲染新的数据呈现在页面上。

那么问题来了,对于用v-for渲染的列表数据来说,数据量可能一般很庞大,而且我们经常还要对这个数据进行一些增删改操作。

假设我们给列表增加一条数据,整个列表都要重新渲染一遍,那不就很费事了。

而key的出现就是尽可能的回避这个问题,提高效率,如果我们给列表增加了一条数据,页面只渲染了这数据,那不就很完美了。

v-for默认使用就地复用策略,列表数据修改的时候,他会根据key值去判断某个值是否修改,如果修改,则重新渲染这一项,否则复用之前的元素。

我们经常使用会使用index(即数组的下标)作为key,但其实不推荐怎么使用。

 

 

为了给Vue一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性。key属性的类型只能为 string或者number类型。

示例

 

复制代码
<!--注意:v- for 循环的时候,key属性只能使用numberstring -->

<!--注意:key使用的时候,必须使用v-bind绑定属性的形式,指定key的值 -->

<!-- 在组件中,使用 v- for 循环的时候,或者在一些特殊情况中,如果v- for 有问题 必须在使用v- for 的同时,指定唯一的 字符串/数字 类型:key 值-->
<p v-for="item in list" :key="item.id">

   <input type="checkbox"/>

   {{item.id}}--{{item.name}}

</p>
复制代码

总结

key的作用主要是为了高效的更新虚拟DOM!!!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM