데브허브 | DEVHUB | React 19 Tutorial - 21 - State as a SnapshotReact 19 Tutorial - 21 - State as a Snapshot
- React에서
setCount 호출 직후 count 값은 이전 값을 유지하지만, UI는 업데이트되는 현상이 발생합니다. 이는 React 개발자들이 흔히 겪는 혼란입니다. 🤯
- 이 현상은 React의 세 가지 단계(Trigger, Render, Commit)와 관련이 있습니다.
setCount를 호출하면 'Trigger' 단계에서 컴포넌트 재렌더링을 예약할 뿐, 현재 실행 중인 이벤트 핸들러를 멈추지 않습니다. 🔄
- 이벤트 핸들러는 현재 렌더링 시점의 '상태 스냅샷'을 사용하여 처음부터 끝까지 실행됩니다. 상태 업데이트는 즉시 반영되지 않고, 다음 렌더링을 위해 예약됩니다. 📸
- 현재 렌더링 내에서 상태 값은 변경되지 않는 스냅샷과 같습니다. 따라서 이벤트 핸들러 내에서
count를 로깅하면 항상 동일한(이전) 값을 얻게 됩니다. 🧊
- 동일한 이벤트 핸들러 내에서 여러 번
setCount를 호출해도, 모두 동일한 초기 스냅샷 값을 기반으로 업데이트를 예약합니다. 이 경우 마지막 setCount 호출이 최종 업데이트를 결정합니다. 🎯
setTimeout과 같은 비동기 코드 내에서도 count 값은 이벤트 핸들러가 실행될 당시의 스냅샷 값을 유지합니다. 변수 값은 렌더링 내에서 고정됩니다. ⏳
- 이러한 스냅샷 동작은 React를 예측 가능하게 만듭니다. 이벤트 핸들러는 일관된 데이터로 작동하며, 함수 중간에 값이 변경될 걱정을 할 필요가 없습니다. ✅