state 관리를 도와줌 (useState와 비슷하지만 더 복잡한 state에 유용하다)
const [state, dispatchFn] = useReducer(reducerFn, initialState, initFn);
// state: 최신 state snapshot
// dispatchFn: state snapshot을 업데이트할 수 있게 해주는 함수 (액션을 디스패치함)
// 그 액션은 useReducer의 첫번째 인자가 소비
// => reducerFn: 최신 state snapshot을 자동으로 가져오는 함수 (리액트가 이 함수 호출)
// 글구 리듀서 함수는 그 이 리듀서 함수 실행을 트리거하는 디스패치된 액션을 가져옴
// why? 리액트는 새 액션이 디스패치될 때마다 이 리듀서 함수를 호출함
// 리듀서 함수의 중요 역할: 새로운 업데이트된 state를 반환
// initialState: 초기 state
// initFn: 초기 함수
useState()
userReducer()
useEffect
→ 항상 참조하는 모든 항목을 의존성으로 useEffect 내부에 추가해야 함useImperativeHandle
, forwardRef
를 사용하면 리액트 컴포넌트에서 온 기능을 노출하여 부모 컴포넌트에 연결한 다음, 부모 컴포넌트 안에서 참조를 통해 그 컴포넌트를 사용하고 기능을 트리거할 수 있음