baseQueue 与 queue.pending
一句话结论:
queue.pending存“新进来的更新”,baseQueue存“上次没算完/被跳过的更新”;每次渲染会把 pending 合并进 baseQueue,再按优先级决定哪些能被处理。
1. 为什么需要两条队列
- 并发渲染可能只处理部分 lanes
- 被跳过的更新不能丢:要在未来更低优先级渲染时继续处理
2. 一次 render 内的典型处理(概念)
- 把
pending环拆开并合并到baseQueue - 从
baseState开始依次应用 update - 遇到优先级不够的 update:跳过并留在新的 baseQueue
- 产出
memoizedState(本次可见的 state)