REDUCER TRANSITIONS

useReducer 상태 전이

useReducer는 상태가 많을 때 쓰는 도구라는 설명만으로는 부족하다. 핵심은 action이 어떤 사건을 의미하고, reducer가 이전 상태에서 다음 상태를 순수하게 계산하며, dispatch가 안정적인 전이入口가 된다는 점이다.

01

사건 이름 붙이기

setName보다 formChanged, submitted, failed처럼 도메인 사건으로 action을 정의한다.

로그와 디버깅이 쉬워진다
02

상태 모델링

값, 로딩, 오류, 성공 여부처럼 함께 바뀌는 상태를 한 객체로 묶는다.

서로 의존하는 state가 흩어지지 않는다
03

순수 계산 유지

reducer는 API 호출, random, Date, localStorage 없이 다음 상태만 반환한다.

부수효과는 이벤트 핸들러나 effect로 분리한다
04

불변 갱신

기존 state를 직접 바꾸지 않고 새 객체나 배열을 반환한다.

mutation은 렌더 감지를 깨뜨릴 수 있다
05

전이 테스트

reducer는 순수 함수이므로 action별 입력과 출력을 작은 테스트로 검증할 수 있다.

UI 없이 상태 규칙을 확인한다
useState
독립적인 작은 값 열림 여부나 단일 입력처럼 전이가 단순하면 충분하다.
간단함을 유지한다
useReducer
관련 상태 전이 여러 필드가 같은 사건으로 함께 바뀌면 reducer가 읽기 쉽다.
상태기계에 가까울수록 유리하다
lazy init
초기 상태 계산 초기화 비용이 있거나 reset 기준이 필요할 때 사용한다.
props 변화와 초기값을 혼동하지 않는다
Context
dispatch 공유 하위 트리에 dispatch를 내려 상태 전이를 한 곳에서 관리할 수 있다.
구독 범위를 조심한다

Reducer 확인

Action 의미 action 이름이 UI 조작이 아니라 상태 사건을 설명하는지 확인한다.
부수효과 reducer 내부에 API 호출이나 저장소 접근이 없는지 본다.
테스트 주요 action별 이전 상태와 다음 상태를 표로 검증한다.