Notes

reconcileChildrenArray

一句话结论:数组 Diff 先走线性快路径,遇到错位再用 Map 通过 key 查找复用;移动/插入会打 Placement,最终把没被复用的旧节点标记删除。

1. 两阶段策略(概念)

  • 第一阶段:从头开始按索引对比,key/type 都匹配就复用并继续
  • 第二阶段:一旦不匹配
    • 把剩余旧节点放入 Map(key 或 index 作为索引)
    • 遍历剩余新节点:用 key 查 Map 找可复用 Fiber

2. 如何判断“移动”

  • 复用到的旧 Fiber 有一个旧索引 oldIndex
  • oldIndex < lastPlacedIndex,说明它相对前面节点“往后挪了”,需要 Placement(移动)
  • 否则更新 lastPlacedIndex = oldIndex

3. 删除怎么处理

  • Map 里最终剩下的旧 Fiber:表示新 children 中没有对应节点 → 标记删除

关联阅读

cd ..