트랜지션(Transitions): 모던 React의 핵심 개념으로, UI 업데이트 스케줄링을 담당합니다. 고비용 작업에 대한 백그라운드 스레드처럼 작동하여 사용자 입력을 우선시하고 UI 끊김 현상을 방지합니다. 🔄
스케줄링: React의 동시성 기능(예: Fiber)이 해결하려는 근본적인 문제로, 사용자 입력을 다른 UI 업데이트(예: 내비게이션, 데이터 페칭)보다 우선 처리할 수 있게 합니다. 🗓️
트랜지션 예시: 타입어헤드 검색(요청 일괄 처리, 결과 변경 방지) 및 테이블 필터(즉각적인 UI 피드백 제공 후 업데이트된 결과로 전환)와 같은 시나리오에서 활용됩니다. 💡
useDeferredValue: "읽기 시점"에서 UI 업데이트를 지연시켜 사용자 입력을 차단하지 않도록 하며, "쓰기 시점"(예: 클릭 핸들러)에서 지연시키는 트랜지션과 상호 보완적입니다. ⏳
서스펜스(Suspense) - 일괄 처리 및 스로틀링: React의 서스펜스는 단순히 로딩 상태를 보여주는 것을 넘어, 폴백(fallback)을 스로틀링(예: 최소 300ms 표시)하여 "쟁크(jank)"를 방지하고 여러 업데이트/애니메이션을 일괄 처리하여 인지된 성능과 효율성을 향상시킵니다. ⏱️
인지된 성능: 연구에 따르면, 로딩 상태의 짧은 깜빡임은 안정적인 업데이트를 위해 약간 더 오래 기다리는 것(예: 300ms)보다 느리게 느껴집니다. 사용자는 서버 데이터 대기(네트워크 탓)는 용인하지만 앱의 쟁크는 용인하지 않습니다. 🧠
모던 기능의 적용: 트랜지션, 지연, 서스펜스, 낙관적 UI와 같은 고급 기능들은 라우터, 데이터 페칭 레이어 및 디자인 컴포넌트에 기본적으로 통합되어, 제품 코드가 명시적인 연결 작업 없이 "무료로" 이러한 이점을 누릴 수 있도록 하는 것이 이상적입니다. 🛠️
useOptimistic: 비동기 작업(예: 서버 요청)이 백그라운드에서 완료되는 동안 임시적이고 낙관적인 UI 상태(예: '좋아요' 버튼)를 즉시 표시하여 사용자에게 즉각적인 피드백을 제공하는 훅입니다. ✨
isPending와 useOptimistic의 관계:useTransition의 isPending 플래그는 본질적으로 useOptimistic을 사용하여 구현되며, 비동기 작업 중 임시 UI 상태 관리에 있어 두 훅의 밀접한 관계를 보여줍니다. 🔗