React 18 中 startTransition 的规则和限制是什么?

xmc*_*mcp 9 javascript reactjs react-hooks

React 刚刚startTransition在 v18 中发布了 API。虽然这看起来像是一个可以带来更多响应能力的“魔咒”,但该文档对其幕后行为的描述相当模糊。文档中与其行为相关的唯一一句话是“转换中的更新会产生更紧急的更新,例如点击”。

作为一名 React 程序员,我担心它是否会导致我的组件出现故障。例如:

  • 过渡期间国家会分裂成两个分支吗?假设我们有一个当前的state. 当转换将其转变为 时slow_update(state),会发生另一个事件将状态转变为fast_update(state)。在这个过程中我们将同时得到slow_update(state)fast_update(state)计算。当状态更新按顺序完成时,这在旧的 React 中永远不会发生。
  • 如果useEffect状态更新触发了一些钩子,如果转换被中断,回调会执行两次吗?由于状态在转换期间发生分支,回调是否会收到一些不一致的数据?

我也很好奇它会让我的应用程序变得更加灵敏。例如:

  • 是否startTransition适用于渲染阶段,还是仅优化协调?它仅适用于回调本身,还是也适用于更新状态的后续渲染、useMemos 和s?useEffect看来 CPU 密集型逻辑无论如何都会阻塞主线程,因此 React 无法中断它。因此,如果我的组件在回调中过滤长列表startTransition,它是否得到了优化?
  • 如果重复发生紧急更新,慢速更新会永远被阻塞吗?例如,如果组件requestAnimationFrame每 16ms 更新一次状态,而慢速转换需要更长的时间,那么慢速转换是否会一次又一次被中断?

我已阅读文档发行说明reactwg 讨论官方示例,但它们没有回答上述问题。由于与并发相关的错误很难修复或重现,因此如果有一些拇指规则(例如hooks 规则)可以保持转换代码始终正确,那就太好了。

一般来说,哪些代码将从中受益startTransition,以及需要什么来避免故障?