리액트로 컴포넌트 단위 개발을 하다보면, 유저의 인터랙션에 따라 변할 수 있는 부분 즉, State(상태)를 변경하고 관리하는 일이 매우 중요하다는 것을 알 수 있게 된다.
하지만 컴포넌트의 State와 props를 다루기 위한 과정에서 로직이 복잡하게 얽히는 경우가 생기는데, 특히 유기적으로 변화해햐하는 형제 컴포넌트에서의 상태 변경을 위해 상위 공통 부모 컴포넌트로 거슬러 올라가야하는 경우에 그 사이를 연결하는 중간 단계(?)의 컴포넌트들은 계속해서 props를 내려주어야하는 상황에 놓인다. 해당 컴포넌트에 직접적으로 필요한 요소가 아님에도 불구하고, 코드를 작성해 넣어야한다. 이는 소모적이며 이후 코드를 수정하기에도 매우 복잡한 일이 된다.
리덕스는 이런 상태관리에 도움을 주는 라이브러리다. 리액트 없이도 사용가능하며, 다음과 같은 원칙을 따른다.
동일한 데이터는 항상 같은 곳 = store 에서 가지고 온다.
store : 상태가 관리되는 오직 하나의 공간
리액트에서 setState 메소드로만 state를 변경할 수 있었던 것처럼, 리덕스에서는 action 객체를 통해서 state를 변경할 수 있다. action객체는 store에 데이터를 운반해주는 역할을 한다.
action객체는 Dispatch 메소드에 전달이 되고, Dispatch는 Reducer함수를 호출해 새로운 state를 생성한다. 이 Reducer 함수는 순수함수로써 동작하며, 어떤 결과값이 나올지 다음을 예측할 수 있게 해준다.
위에 정리한 개념을 바탕으로 실제 코드 작성을 연습해본 후에 더 구체적으로 블로깅할 예정.