상태가 예측 가능한 방식(일관된 방식)으로만 업데이트 될 수 있도록 보장하는 규칙과 함께 전체 애플리케이션에서 사용해야하는 상태에 대한 중앙 저장소 역할을합니다.
애플리케이션 상태 관리(Managing States)는 버그를 최소화 하면서 잘 만들어진 경험(UX)을 사용자에게 제공하는 데 절대적으로 중요합니다. 또한 오늘 날 프론트 엔드 애플리케이션 제작에 있어 가장 어려운 부분 중 하나입니다.
hot reloading
할 수 있다는 점Store
, 상태 변환 로직을 담당하는 Reducer
가 분리되어 있기 떄문에 Reducer
(상태변환로직)만 갱신하여 상태를 잃어버리지 않는다.Redux
와 React 자체 기능에 포함된 Context hook
은 상태(state)를 가지고 작업을 수행하고 prop-drilling을 피할 수 있다.
하지만 서로 대체제로 사용되는 도구는 아니다. 엄연히 다르다...
위 도구들의 차이점을 알아보자
Prop Drilling?
Prop Drilling 은 props를 오로지 하위 컴포넌트로 전달하는 용도로만 쓰이는 컴포넌트들을 거치면서 React Component 트리의 한 부분에서 다른 부분으로 데이터를 전달하는 과정입니다
관리
하는 역할까지 ++상태관리는 다음과 같은 방법을 갖는것을 의미
1. 초기 값을 저장
2. 현재 값 읽기
3. 값 업데이트
useReducer와 Context를 조합하여 상태관리를 하는것은 React-Redux와 사용법이 매우 비슷하다.
그러나 위 두 가지의 사용법은 매우 중요한 차이점을 가지고 있다.
useReducer와 Context의 조합
은 Context에 등록된 값이 하나라도 변경되어도 Context에 등록된 모든 상태를 사용하는 UI가 re-render 된다.React-Redux
는 컴포넌트가 store 상태의 특정부분을 구독하고 해당 값이 변경될 떄만 다시 re-renderuseReduer
는 미들웨어가 없다. React-Redux
의 미들웨어의 유용한 확장기능을 사용할수 없단얘기!작업하는 App에 따라 어떤 도구를 사용할지 결정하면 된다.
단지 prop-drilling을 피하는 것이 목적이면 Context를 사용
적당히 복잡한 React 구성요소 상태가 있거나 외부 라이브러리를 사용하고 싶지 않다면 Context + useReducer
시간이 지남에 따라 상태 변경 사항을 추적하고 상태가 변경될 때 특정 요소만 다시 렌더링 되도록 해야하며, Side Effect를 위한 더 강력한 기능이 필요하면 React-Redux를 사용하면 된다.
물론 React-Redux와 useReducer+Context는 서로 대체재가 아니다.
동일한 App에서 함께 사용할 수 있다.
global state에는 React-redux를 더 지역적인 부분에서는 useReducer+Context를, 일부 정적값에서는 Context를..