从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、乱序

相关推荐
天若有情67317 小时前
程序员原创|借鉴JS事件冒泡,根治电脑文件混乱的“冒泡整理法”
开发语言·javascript·windows·ecmascript·电脑·办公·日常
FYKJ_201019 小时前
springboot校园兼职平台--附源码02041
java·javascript·spring boot·python·eclipse·django·php
用户6688599847661 天前
Vue 3.0安装与使用
vue.js
空中海1 天前
01 React Native 基础、核心组件与布局体系
javascript·react native·react.js
前端之虎陈随易1 天前
2年没用Nodejs了,Bun很香
linux·前端·javascript·vue.js·typescript
好运的阿财1 天前
OpenClaw工具拆解之host_workspace_write+host_workspace_edit
前端·javascript·人工智能·机器学习·ai编程·openclaw·openclaw工具
XiYang-DING1 天前
JavaScript
开发语言·javascript·ecmascript
空中海1 天前
02 React Native状态、导航、数据流与设备能力
javascript·react native·react.js
空中海1 天前
02 状态、Hooks、副作用与数据流
开发语言·javascript·ecmascript
空中海1 天前
04 React Native工程化、质量、发布与生态选型
javascript·react native·react.js