1. Will the state split?
You can think of it this way: React
works on the new state in the background. If interrupted by an urgent update, it will discard the background work and start over from the new, updated state. The state finally committed to the DOM is always consistent, so you won't encounter "branching" bugs.
2. Will it execute twice?
No. The useEffect
callback and its cleanup function only run for renders that are successfully committed to the DOM. For any render that is interrupted and discarded, its corresponding useEffect
will not run at all. This prevents duplicate executions or running with inconsistent data.
3. What does it optimize?
startTransition
optimizes React's rendering process, not your JavaScript computation. It allows React to pause between rendering different components, but it cannot interrupt a synchronous function while it's running. Therefore, a long-running .filter()
operation will still block the main thread.
4. Will it be blocked forever?
Theoretically, yes, it's possible. If urgent updates occur continuously, a transition
can be postponed indefinitely and may never complete. This scenario is known as "starvation," but it's considered an edge case in practice.