patchVnode 函数(第一版)
对比同一虚拟节点(精细化比较)
不处理新旧虚拟节点都有 children 的情况
1 | import createElement from "./createElement"; |
diff算法的子节点更新策略
四种命中查找:
- ①新前与旧前
- ②新后与旧后
- ③新后与旧前(此种发生了,涉及移动节点,那么旧前所指向的节点要移动到旧后之后)
- ④新前与旧后(此种发生了,涉及移动节点,那么旧后所指向的节点要移动到旧前之前)
命中一种就不再进行命中判断了,如果都没有命中,就需要用循环来寻找了。移动到oldStartIdx
之前。
updateChildren 函数
处理新旧虚拟节点都有 children 的情况
1 | import patchVnode from "./patchVnode"; |
patchVnode 函数(第二版)
1 | import updateChildren from "./updateChildren"; |
patch 函数(第二版)
1 | import patchVnode from "./patchVnode"; |