从vue源码中看diff算法

一、v-for必须要指定key,其作用是什么?

在源码中有一个函数为,其中就是通过判断两个vnode的type和key进行判断,如果这两个属性相同,那么这两个vnode就是相同,所以在设置key的时候也不可以设置为object等无法通过三等号判断的类型。

js 复制代码
export function isSameVNodeType(n1: VNode, n2: VNode): boolean {
  return n1.type === n2.type && n1.key === n2.key
}

二、diff分为五种对比策略

源码在packages/runtime-core/src/renderer.ts的patchKeyedChildren()函数。

1、从前向后

2、从后向前

3、新节点 > 旧节点

4、旧节 > 新节点

5、乱序

相关推荐
孙_华鹏2 小时前
手撸一个可以语音操作高德地图的AI智能体
前端·javascript·coze
拉不动的猪2 小时前
设计模式之--------工厂模式
前端·javascript·架构
WDeLiang3 小时前
Vue学习笔记 - 逻辑复用 - 组合式函数
vue.js·笔记·学习
Aphelios3803 小时前
TaskFlow开发日记 #1 - 原生JS实现智能Todo组件
java·开发语言·前端·javascript·ecmascript·todo
weixin_748877003 小时前
【在Node.js项目中引入TypeScript:提高开发效率及框架选型指南】
javascript·typescript·node.js
风中飘爻4 小时前
JavaScript:基本语法
开发语言·前端·javascript
Direct_Yang4 小时前
JavaScript性能优化(上)
开发语言·javascript·ecmascript
烛阴4 小时前
Express + Prisma + MySQL:一站式搭建高效 Node.js 后端服务
javascript·后端·express
涵信4 小时前
第二节:React 基础篇-受控组件 vs 非受控组件
前端·javascript·react.js
bingbingyihao5 小时前
通过代码获取接口文档工具
开发语言·前端·javascript