Redux

Redux

Redux란?

Redux는 자바스크립트 애플리케이션을 위한 강력한 상태 관리 라이브러리로, React에 한정되지 않고 여러 프론트엔드 프레임워크에서 사용할 수 있다. Redux를 사용하면 애플리케이션의 상태를 예측 가능하고 효율적으로 관리할 수 있으며, 유지보수와 디버깅, 테스트 작업이 용이해진다.

Redux의 장점

  • 예측 가능한 상태: 순수 함수를 사용하여 상태를 관리함으로써, 애플리케이션의 상태 변화를 예측 가능하게 만든다.
  • 유지보수 용이: 명확한 구조와 규칙을 통해 코드의 유지보수가 용이해진다.
  • 디버깅 용이: Redux DevTools와 같은 도구를 통해 상태 변화를 시각적으로 모니터링하고 디버깅할 수 있다.
  • 테스트 용이: 순수 함수와 명확한 상태 변화 규칙 덕분에 테스트가 용이하다.

Redux의 3원칙

  1. 단일 진실의 원천(Single Source of Truth): 애플리케이션의 모든 상태는 하나의 스토어 안에 하나의 객체 트리로 저장된다.
  1. 상태는 읽기 전용(State is Read-Only): 상태를 변경하기 위해서는 액션을 통해서만 가능하며, 액션은 상태를 어떻게 변경할지 설명하는 객체다.
  1. 순수 함수로 변경(Changes are Made with Pure Functions): 액션에 의해 상태 트리를 어떻게 변화시킬지를 결정하는 리듀서는 순수 함수다.
<순수함수>
  • reducer 함수는 이전 state와 action 객체를 파라미터로 받는다.
  • 파라미터 이외 값(외부의 변수)에 의존하면 안 된다.
  • 이전 state는 절대로 건드리면 안 되고, 변화를 준 새로운 state 객체를 만들어 반환해야 한다.
    • → state mutation 금지, (spread operator 사용)
  • 똑같은 파라미터로 호출된 리듀서 함수는 언제나 똑같은 결과 값을 반환한다.

Redux 구성 요소

  • Store: 애플리케이션의 상태와 로직을 포함하는 객체다. getState(), dispatch(action), subscribe(listener) 등의 메소드를 제공한다.
  • Action: 상태 변화를 일으킬 때 참조하는 객체로, type 프로퍼티를 필수로 가진다. 액션 크리에이터는 액션 객체를 반환하는 함수다.
  • Reducer: 이전 상태와 액션을 받아 새 상태를 반환하는 순수 함수다. 상태 변경 로직을 담당한다.

Store

  • store.getState: 현재 store의 state를 출력한다.
  • store.dispatch(type: 'action', data: 'obj'): store에 등록한 reducer에 액션 객체를 전달한다.
  • store.subscribe(이벤트): 작업이 store에 전달될 때마다 호출된다.
  • replaceReducer(다음 리듀서): store에서 사용하는 reducer를 바꾼다.

Action

→ 앱에서 스토어에 운반할 데이터를 말하며, 자바스크립트 객체 형식으로 존재한다.
Action Creator
  • 액션(객체)을 만들어주는 함수로, state 변경을 위한 주문서다. 추상화해서 만들면 좋다.

Reducer

→ Action이 Reducer에 전달되어 Store에서 State를 업데이트 한다.
→ Action을 Reducer에 전달하기 위해 dispatch 메소드를 사용한다.