useState와 마찬가지로 상태 관리를 할 때 사용된다.
const [state, dispatch] = useReducer(reducer, initialState);
reducer 함수를 따로 정의해야 한다.
const initialState = {count: 0};
function reducer(state, action) {
switch (action.type) {
case 'increment':
return {count: state.count + 1};
case 'decrement':
return {count: state.count - 1};
default:
throw new Error();
}
}
function Counter() {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<>
Count: {state.count}
<button onClick={() => dispatch({type: 'decrement'})}>-</button>
<button onClick={() => dispatch({type: 'increment'})}>+</button>
</>
);
}
state가 previous state에 크게 의존하거나 state가 복잡한 경우에는 useState보다 useReducer를 사용하는 것이 좋다.