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

相关推荐
树下水月1 小时前
纯HTML 调用摄像头 获取拍照后的图片的base64
前端·javascript·html
蜗牛攻城狮1 小时前
Vue 中 `scoped` 样式的实现原理详解
前端·javascript·vue.js
豆苗学前端1 小时前
前端工程化终极指南(Webpack + Gulp + Vite + 实战项目)
前端·javascript
比老马还六1 小时前
Bipes项目二次开发/海龟编程(六)
前端·javascript
瘦的可以下饭了1 小时前
2 数组 递归 复杂度 字符串
前端·javascript
weixin_462446231 小时前
nodejs 下使用 Prettier 美化单个 JS 文件(完整教程)
开发语言·javascript·ecmascript
q_19132846952 小时前
基于SpringBoot2+Vue2的行业知识答题考试系统
java·vue.js·spring boot·mysql·毕业设计·计算机毕业设计·演示文稿
hxmmm2 小时前
自定义封装 vue多页项目新增项目脚手架
前端·javascript·node.js
ETA82 小时前
JS执行机制揭秘:你以为的“顺序执行”,其实是V8引擎在背后搞事情!
前端·javascript
鹏北海-RemHusband2 小时前
微前端实现方式:HTML Entry 与 JS Entry 的区别
前端·javascript·html