欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > vue2-key的原理与作用

vue2-key的原理与作用

2025/2/6 8:34:08 来源:https://blog.csdn.net/xiaobangkeji/article/details/145463532  浏览:    关键词:vue2-key的原理与作用

vue2-key的原理与作用

1. 啥是key

  • VUE中,key是给vnode一个唯一的ID,也是diff的一种优化策略,可以根据key,更准确,更快的找到对应的vnode节点
  • 我们在使用v-for时,需要给每个元素加上一个唯一的ID
  • 使用+new Date生成的时间戳作为key,手动强制出发重新渲染

2. 为什么要添加key

  • 在使用v-for时,如果不使用key,Vue会采用就地复用的原则,最小化元素的移动,尝试最大程度在适当的地方对相同类型的元素作patch和reuse
  • 如果使用key,vue会根据keys的顺序记录元素,曾经拥有了key的元素如果不再出现,会被直接remove或者destroy

3. 设置key一定会提高diff效率么

  • 不一定,vue官方文档中说明
当Vue.js用v-for正在更新已渲染多的元素列表时,他会默认用“就地复用”策略,如果数据项的书序被改变,Vue不会移动DOM元素来匹配数据项的顺序,而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素
  • 这个默认的模式是⾼效的,但是只适⽤于不依赖⼦组件状态或临时 DOM 状态 (例如:表单输⼊值) 的列表渲染输出
  • 建议尽可能在使⽤ v-for 时提供 key ,除⾮遍历输出的 DOM 内容⾮常简单,或者是刻意依赖默 认⾏为以获取性能上的提升

4. 原理分析

  • 源码位置:core/vdom/patch.js
function sameVnode (a, b) {return (a.key === b.key && ((a.tag === b.tag &&a.isComment === b.isComment &&isDef(a.data) === isDef(b.data) &&sameInputType(a, b)) || (isTrue(a.isAsyncPlaceholder) &&a.asyncFactory === b.asyncFactory &&isUndef(b.asyncFactory.error))))
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com