React 底层实现:当一个 Fiber 节点被标记为 Deletion 时,其内部的 useEffect 清理函数是在哪个相位执行的?

各位同学,大家好。 欢迎来到 React 内部架构的“解剖室”。今天我们要聊一个稍微有点“变态”,但又极其重要的话题:Fiber 节点的死亡(Deletion)与 useEffect 清理函数的送别仪式。 如果你觉得 React 只是一个用来写 UI 的框架,那你大概只用了它 10% 的功能。如果你想成为一名资深的前端架构师,或者只是单纯想搞懂“为什么我的组件销毁后 setTimeout 还在跑”这种反直觉的现象,那么请坐好,系好安全带。我们要开始钻进 React 的底层代码里了。 在这个讲座里,我假设大家已经对 Fiber 树、Render Phase(渲染阶段)和 Commit Phase(提交阶段)有基本的了解。如果你们还搞不清 workInProgress 和 current 的区别,我建议你们先去复习一下我的上一篇文章,或者去喝杯咖啡冷静一下。 今天,我们的目标是那个被标记为 Deletion(删除)的 Fiber 节点。当 React 决定要扔掉这个节点时,它究竟是在哪个时间点、哪个函数里,把你的 useEffect 清理函数给“枪毙”的? 别急,答案可能会让你大吃一惊,甚 …