为什么 componentWillMount 会被 React Fibre 调用多次?

Why might componentWillMount be called multiple times with React Fibre?

我现在已经阅读了多个来源,使用 react Fiber(异步渲染)componentWillMount() 可能会被调用多次。

为什么会这样?

Fiber 旨在支持的一件事是高优先级与低优先级更新。例如,动画是高优先级更新(因为 60fps 动画中的卡顿很容易被注意到),而 api 调用的变化是低优先级的(谁会注意到你的东西多了一百毫秒)无论如何都要等一下?)。

因此,一个简单的示例,仅对 componentWillMount 进行一次标准调用,如下所示:我们执行低优先级更新,协调器开始在组件树中工作,对它们调用 componentWillMount,并执行它的操作其他和解工作。由于 运行 时间不够,它暂停让事件循环恢复。没有高优先级的东西,所以在下一个空闲回调时,它会从它停止的地方开始,完成协调并提交更新。没有额外的 componentWillMounts.

下一个示例:低优先级更新开始,和之前一样,协调器通过树调用 componentWillMount 在它们上工作。和以前一样,它暂停执行,但这次有一个高优先级的更新。所以当协调恢复时,反应将注意力转移到高优先级的更新上。它协调该更新,并提交它。现在可以自由地恢复低优先级更新,但它已经完成的工作需要被丢弃,因为高优先级更新可能已经做出影响低优先级更新计算内容的更改。由于它必须重新开始,因此需要再次调用 componentWillUpdate。