Summary
Lanes/priorities order updates: discrete input > continuous input > default > transition > idle. Mis-prioritized updates (heavy setState on every keystroke without transition) cause jank. useDeferredValue delays showing stale value while re-rendering. Match priority to user expectation — don't defer critical feedback.
Code example
import { useTransition } from 'react';
function TabPanel({ tab }) {
const [isPending, startTransition] = useTransition();
function selectTab(next) {
startTransition(() => setActiveTab(next));
}
return isPending ? <Skeleton /> : <Content tab={tab} />;
}
Key points
- Lanes/priorities order updates: discrete input > continuous input > default > transition > idle.
- Mis-prioritized updates (heavy setState on every keystroke without transition) cause jank.
useDeferredValuedelays showing stale value while re-rendering.- Match priority to user expectation — don't defer critical feedback.