ensureRootIsScheduled
一句话结论:
ensureRootIsScheduled是 React 调度的入口之一,它负责把“哪个 root 需要工作、以什么优先级工作”注册到 Scheduler,并避免重复调度。
1. 它要解决的问题
- 同一时间可能有多个 root、多次更新触发
- 需要把它们合并、排序,并只安排必要的回调(避免重复 schedule)
2. 典型流程(概念版)
- 把当前 root 加入“已调度 root 列表”
- 安排一次 microtask(或等价机制)去统一处理这些 root
- 在 microtask 中计算每个 root 的 nextLanes/优先级
- 调用 Scheduler:以对应优先级安排回调(callbackNode)
3. 常见追问
- “为什么用 microtask”:把同一轮事件里的多次更新合并,减少重复工作
- “如何避免饥饿”:Lane 有过期时间/提升机制(expired lanes)