Notes

useEffect 的实现原理是什么

结论:useEffect 在 render 阶段只是把 effect(create/destroy/deps)登记到 Fiber 并打 Passive flag;commit 完成后 React 统一 flush passive effects:先执行 cleanup,再执行 create。

1. render 阶段做什么

  • 创建 effect 对象,保存 deps 与回调
  • 把 effect 挂到 fiber.updateQueue(常见是环形链表)
  • deps 变化则标记 HookHasEffect,提示需要执行

2. commit 后如何执行

  • flush passive effects:先跑上次的 destroy,再跑这次的 create
  • 通常异步调度,避免阻塞绘制

3. 常见追问

  • “deps 怎么比较”:逐项 Object.is
  • “为什么 cleanup 先于 create”:避免重复订阅/资源泄漏

关联阅读

cd ..