"매 React 18+ Concurrent renderer 의 internal priority system — 매 update 의 31-bit lane bitmask 로 매 batching + interleaving". 매 expiration time model 의 successor — 매 lane 의 multiple concurrent priority 의 단일 frame 내 처리. 매 user code 노출 X 매 hook (useTransition, useDeferredValue) 으로 활용.
매 핵심
매 lane 분류 (React 19)
SyncLane (1): 매 input event, click — 매 highest priority.
InputContinuousLane: 매 drag, scroll — 매 60fps target.
DefaultLane: 매 normal update.
TransitionLanes (multiple): useTransition 매 non-blocking.
RetryLanes: 매 Suspense boundary retry.
IdleLane: 매 background.
매 lane bitmask 의 의미
31-bit integer — 매 set bit 가 매 pending lane.
매 root.pendingLanes 매 work-in-progress 표현.
매 highest priority lane 부터 매 process.
매 batching: 매 동일 lane 의 update 합산.
매 user-facing API
useTransition(): 매 isPending + startTransition.
useDeferredValue(value): 매 stale value 매 background commit.
<Suspense>: 매 fallback 매 lane 분리.
매 응용
매 search-as-you-type (input urgent + result transition).
매 tab switching 매 stale UI 즉시 + new content 의 stream.
매 large list render 매 chunk priority.
💻 패턴
useTransition — 매 non-urgent update
import{useState,useTransition}from'react';functionSearchPage() {const[query,setQuery]=useState('');const[results,setResults]=useState([]);const[isPending,startTransition]=useTransition();functiononChange(e){setQuery(e.target.value);// 매 urgent — input lane
startTransition(()=>{// 매 transition lane — interruptible
setResults(searchData(e.target.value));});}return(<><inputvalue={query}onChange={onChange}/>{isPending&&<Spinner/>}<ResultListresults={results}/></>);}
useDeferredValue — 매 stale-while-update
import{useDeferredValue,useState}from'react';functionApp() {const[text,setText]=useState('');constdeferredText=useDeferredValue(text);// 매 deferredText 는 lower priority lane 매 update
return(<><inputvalue={text}onChange={(e)=>setText(e.target.value)}/><ExpensiveListquery={deferredText}/></>);}
import{unstable_scheduleCallbackasschedule,unstable_NormalPriorityasNormal,unstable_LowPriorityasLow}from'scheduler';// 매 React 내부 — 일반적으로 사용 X
schedule(Low,()=>doBackgroundWork());