startTransition lets you render a part of the UI in the background.
startTransition(action)Reference
startTransition(action)
ThestartTransition function lets you mark a state update as a Transition.
import{startTransition}from'react';
functionTabContainer(){
const[tab,setTab] =useState('about');
functionselectTab(nextTab){
startTransition(()=>{
setTab(nextTab);
});
}
// ...
}Parameters
action: A function that updates some state by calling one or moresetfunctions. React callsactionimmediately with no parameters and marks all state updates scheduled synchronously during theactionfunction call as Transitions. Any async calls awaited in theactionwill be included in the transition, but currently require wrapping anysetfunctions after theawaitin an additionalstartTransition(seeTroubleshooting). State updates marked as Transitions will benon-blocking andwill not display unwanted loading indicators..
Returns
startTransition does not return anything.
Caveats
startTransitiondoes not provide a way to track whether a Transition is pending. To show a pending indicator while the Transition is ongoing, you needuseTransitioninstead.You can wrap an update into a Transition only if you have access to the
setfunction of that state. If you want to start a Transition in response to some prop or a custom Hook return value, tryuseDeferredValueinstead.The function you pass to
startTransitionis called immediately, marking all state updates that happen while it executes as Transitions. If you try to perform state updates in asetTimeout, for example, they won’t be marked as Transitions.You must wrap any state updates after any async requests in another
startTransitionto mark them as Transitions. This is a known limitation that we will fix in the future (seeTroubleshooting).A state update marked as a Transition will be interrupted by other state updates. For example, if you update a chart component inside a Transition, but then start typing into an input while the chart is in the middle of a re-render, React will restart the rendering work on the chart component after handling the input state update.
Transition updates can’t be used to control text inputs.
If there are multiple ongoing Transitions, React currently batches them together. This is a limitation that may be removed in a future release.
Usage
Marking a state update as a non-blocking Transition
You can mark a state update as aTransition by wrapping it in astartTransition call:
import{startTransition}from'react';
functionTabContainer(){
const[tab,setTab] =useState('about');
functionselectTab(nextTab){
startTransition(()=>{
setTab(nextTab);
});
}
// ...
}Transitions let you keep the user interface updates responsive even on slow devices.
With a Transition, your UI stays responsive in the middle of a re-render. For example, if the user clicks a tab but then change their mind and click another tab, they can do that without waiting for the first re-render to finish.
Note
startTransition is very similar touseTransition, except that it does not provide theisPending flag to track whether a Transition is ongoing. You can callstartTransition whenuseTransition is not available. For example,startTransition works outside components, such as from a data library.
Learn about Transitions and see examples on theuseTransition page.