전형적인 optimistic-update 버그: 변경 즉시 보여주고 서버가 no 라 할 때 roll back 잊음. useOptimistic 가 rollback 대신 처리 — Action settle 시 합성 state 가 자동으로 사라짐.
시그니처
const [optimisticState, addOptimistic] = useOptimistic(realState, updater) — updater 가 (current, optimisticValue) => newState. Hook 반환:
- optimisticState — 렌더할 state. Action pending 없으면 realState 와 같음; Action in-flight 인 동안 updater 의 출력과 같음.
- addOptimistic — Action 안에서 호출해 optimistic 업데이트 적용.
패턴
Action 안에서 addOptimistic(value) 를 첫 번째로 호출, 그 다음 진짜 작업 await. UI 가 즉시 optimistic 값 반영. Action settle (성공 또는 실패) 시 useOptimistic 가 optimistic 값 버리고 그 시점의 realState 와 재동기화.
'거짓 없음' 원칙
Optimistic 업데이트는 UX 가속기, 정확성 단축 아님. Action 이 정말로 fail 가능 (네트워크 다운, 유효성 에러, 권한 거부) 하면 rollback flash 가 정직 — 사용자가 즉시 희망 보고, 그 다음 진실 봄. 피드백 없는 것보다 나음, 사용자 action 조용히 떨어뜨리는 것보다 훨씬 나음.
흔한 짝
useOptimistic + useActionState: realState 가 useActionState 에서; useOptimistic 가 합성 버전용으로 감쌈. 대부분의 프로덕션 패턴이 둘 다 사용 결말.
사용자엔 optimistic, 시스템엔 authoritative. Optimistic state 가 사용자가 보고 느끼는 것; real state 가 reload 살아남는 것. Success 경로에 정렬 유지; 실패에 보이는 flash 가 진실 말하게.