Notes

详细聊聊 React 的事件系统是如何实现的

结论:React 用根节点事件委托接住原生事件,再通过插件系统提取 SyntheticEvent,沿 Fiber 路径收集 capture/bubble listeners,最后形成队列按顺序执行;回调里的更新会映射到对应事件优先级。

1. 事件委托

  • 根容器少量监听器覆盖大量组件事件
  • 组件增删不需要频繁 add/remove 原生监听

2. 插件提取与分发

  • 插件根据事件类型提取 SyntheticEvent
  • 通过 Fiber 路径收集 listeners,组装 dispatchQueue
  • 按 capture → bubble 执行回调

3. 常见追问

  • “为什么 React 17 把委托从 document 移到 root”:多 root 更隔离
  • “事件对象能异步用吗”:不要长期持有,必要时提前解构

关联阅读

cd ..