对“深度比较”的逻辑有一些问题。

来源:4-12 深入diff算法源码-patchVnode函数

Hard_Black_

2022-07-27

老师,这几章看完有一些问题请教您一下。
1、diff算法原则说的tag和key都相同时,不再深度比较是指不再对当前新旧vnode的其他除children属性再作比较吗,直接默认新旧的两个vnode的其他属性全都一致吗?这个“深度”的含义似乎和之前章节的深度监听还有深拷贝的“深”不是同一个意思,这里的“不再深度比较”实际上还是要对两者的children进行比较,而深度监听和深拷贝是明确了要对其子属性进行递归遍历。似乎这两种“深度”的意义完全不同。
2、如果出现两个tag相同,key都为undefined的vnode,但是它们的其他某些属性不同,比如绑定了不同的事件,这个时候diff算法只对tag和key作比较,不就会导致vnode绑定的事件不会被更新吗?这种情况会发生吗,或者发生了又会怎么处理呢?

写回答

1回答

双越

2022-07-27

tag 和 key 相同,则不再深度比较 —— 这个是一个理论指导。

具体实现上会有不同的细节处理

0
0

前端框架及项目面试 聚焦Vue3/React/Webpack

面向1-3年前端的框架及项目面试“刚需内容”

4695 学习 · 1667 问题

查看课程