일부 state 업데이트는 즉시 느껴져야 (키 입력). 다른 건 잠시 걸려도 됨 (10,000 검색 결과 렌더). useTransition 이 React 한테 어느 게 어느 건지 알려줘 — 긴급한 게 비긴급한 거 안 기다리게.
모양
const [isPending, startTransition] = useTransition(). startTransition(() => setX(...)) 안에 어떤 state 업데이트든 감싸면 React 가 저우선순위로 태그. Hook 이 어떤 in-flight transition 이 여전히 도는지 알려줌.
전형적 사용 케이스 — 검색
검색 input 타이핑은 항상 즉시 느껴져야. 다만 새 쿼리로 결과 리스트 업데이트가 무거운 컴포넌트 트리 re-render 가능. Transition 없으면 'react' 타이핑이 키 입력당 수십 밀리초 막음. 결과 업데이트 감싸는 transition 으로 input 즉시 업데이트 (긴급), 결과가 백그라운드에서 catch up (비긴급).
Suspense 상호작용
Transition 이 Suspense fallback 도 smooth. State 변경이 자식 suspend 일으키면 보통 Suspense fallback 이 flash in. Transition 안에선 React 가 새 거 준비될 때까지 이전 컨텐츠 보이게 유지 — fallback flash 없음. isPending 이 페이지 blank 안 하고 subtle pending 지시자 (예: 상단 로딩 바) 언제 보일지 알려줌.
startTransition 안에 들어가는 것
State 업데이트만. Fetch, side effect, 또는 어떤 async 도 감싸지 마. 패턴: 작업 수행, 그 다음 state 변경을 transition 으로 표시:
const data = await fetchResults(query);
startTransition(() => setResults(data));