当前位置: 首页 > article >正文

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)
             )
         )
     )
}

http://www.kler.cn/a/533961.html

相关文章:

  • Linux 安装 RabbitMQ
  • 【现代深度学习技术】深度学习计算 | 延后初始化自定义层
  • vue2-为啥data属性是一个函数而不是对象
  • 专业学习|一文了解并实操自适应大邻域搜索(讲解代码)
  • 3.【BUUCTF】XSS-Lab1
  • 拍照对比,X70 PRO与X90 PRO+的细节差异
  • 开源安全一站式构建!开启企业开源治理新篇章
  • Java 中 LinkedList 的底层源码
  • 【后端开发】系统设计101——通信协议,数据库与缓存,架构模式,微服务架构,支付系统(36张图详解)
  • 在C#中使用DeepSeek API实现自然语言处理、文本分类、情感分析等
  • HTML语言的软件工程
  • flutter 专题四十七 Flutter 应用启动流程分析
  • 【力扣】240.搜索二维矩阵 II
  • 4 前端前置技术(上):AJAX技术、Axios技术(前端发送请求)
  • idea分析sql性能
  • win32汇编环境,对话框程序中自定义工具栏的使用示例
  • neo4j-在Linux中安装neo4j
  • 【华为OD-E卷 - 115 数组组成的最小数字 100分(python、java、c++、js、c)】
  • C# Action和 Func的用法
  • [操作系统] 进程终止
  • 大模型 Llama 微调如何适配中文_词表扩展
  • 如何开发一个大语言模型,开发流程及需要的专业知识
  • 【数学】矩阵、向量(内含矩阵乘法C++)
  • Ubuntu22.04如何设置linux-lowlatency核心
  • 扩增子分析|零模型2——基于βNTI的微生物随机性和确定性装配过程(箱线图和柱状图R中实现)
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_sprintf_num 函数