Redux 기초

2021. 9. 18. 00:01
반응형

1. Redux 세 가지 원칙

  1. Single source of truth : 동일한 데이터는 항상 같은 곳에서 데이터를 가지고 온다. 즉, 데이터를 저장하는 store라는 하나뿐인 공간이 있다.
  2. State is read-only : React에서 useState로 state를 변경해주는 것 처럼 Redux에서는 action이라는 객체를 통해서 state를 변경할 수 있다.
  3. Changes are made with pure function : 변경은 순수함수로만 가능하다. Reducer와 연결되는 개념이다.

2. Redux 기본 개념

  정의 : Redux는 자바스크립트 앱에서 예측가능한 상태관리를 해주는 Container.

1) Store : 상태가 관리되는 오직 하나의 공간

컴포넌트들과 별개로 Store라는 공간이 있어서 그 스토어 안에 앱에서 필요한 state를 두고 컴포넌트들에서 state정보가 필요할 때 Store에 접근해서 state 정보를 가져올 수 있다.

2) Action : Simple Javascript Object

Action객체는 type을 비롯한 다양한 데이터가 담긴다. 그리고 Store에게 우리 애플리케이션의 데이터를 운반 해주는 역할을 한다. 타입을 꼭 지정해줘야하고 필요한 정보를 객체안에 담아준다.

3) Reducer : 현재 상태와 Action을 이용해 다음 상태를 만들어 냄

Action을 통해서 우리 앱의 데이터를 Store에 운반을 할 수 있다고 했는데, 그 과정에서 Reducer를 거쳐서 가야한다. Store에는 현재의 state가 있을 것이고, 그 현재 state와 Action을 이용해서 new state를 만들어낼 수 있다. 위의 공식을 따르는 이유는 데이터가 한 방향으로 흘러야하기 때문이다.

*Reducer의 Immutability(불변성)
Reducer 함수를 작성할 때 주의해야 할 점이 있다. 바로 Redux의 state업데이트는 immutable한 방식으로 변경해야 한다는 것이다. 
immutable한 방식으로 state를 변경하기 위해서는 Object.assign을 통해 새로운 객체를 만들어 리턴하는 것을 통해 힌트를 얻을 수 있다.

4) Overview

브라우저에서 플러스 버튼을 클릭하는 이벤트가 발생하면 Dispatch의 전달인자로 Action객체를 담아서 Reducer로 전달이 된다. 그럼 이 Reducer는 Action객체의 type에 따라서 다른동작을 수행할 것이다. 그 동작의 수행결과로 새로운 state가 반환된다.

5) Redux에서 이 개념들을 connect할 수 있는 방법 두 가지

  • map state props
  • Redux Hooks -> 조금 더 직관적이고 최근에 나온 방법.

6) Redux Hooks

  • useSelector() : 컴포넌트와 state를 연결하는 역할을 한다. 컴포넌트에서 useSelector메소드를 통해서 store의 state에 접근할 수 있다.
  • useDispatch() : Action 객체를 Reducer로 전달해주는 메소드이다. Action이 일어날만한 곳은 클릭 등의 이벤트가 일어나는 컴포넌트일 것이다. 컴포넌트에서 이벤트 핸들러 함수안에 dispatch()로 Action을 호출해서 사용한다.

7) Redux의 장점

  1. 상태를 예측 가능하게 만들어 준다. → 리듀서라는 것은 순수함수이기 때문에 다음상태가 어떻게 될지 쉽게 예측할 수 있다.
  2. 유지보수에 용이하다. → React의 복잡한 컴포넌트에서 앱에 props를 내려받기위한 방식으로 작성을 했다면, 버그가 나타났을 때 그 props를 내려준 경로에 있는 모든 컴포넌트들을 수정을 해야하니까 엄청 복잡해진다. 그런데 Redux를 이용을 해서 action과 state log를 기록하면 action이 생겼을 때 어떤 일이 일어나는지 다 추적을 할 수 있기 때문에 디버깅이 굉장히 유리해질 것이다.
  3. 디버깅에 유리하다 (action과 state log 기록 시) ↵
  4. 테스트를 붙이기 쉽다. → 순수함수를 사용하기 때문에 테스트를 붙이기 용이하다.
반응형
LIST