1. Redux란?

상태 관리 라이브러리로 컴포넌트들의 상태 관련 로직들을 타 파일로 분리하여 효율적으로 관리할 수 있다. 또 컴포넌트 간에 상태 공유 시 쉽게 상태 값을 전달할 수 있다.


2. 구성요소

2.1. Action

상태의 변화가 필요할 떄 액션이 발생된다. 액션은 하나의 객체로 표현된다.

2.2. Action Creator

액션을 만드는 함수다. 파라미터를 받아서 액션 객체 형태로 만든다.

2.3. Reducer

업데이트 로직을 정의하는 함수다. state와 action의 두 파라미터를 받는다. 이 현재 상태와 액션을 참고하여 새로운 상태를 만든 후 반환한다.

예를 들어 ADD라는 액션이 들어오면 숫자를 더하고, MINUS라는 액션이 들어오면 숫자를 감소시키는 작업 등이다.

2.4. Store

Redux는 애플리케이션 당 스토어를 만든다. 스토어 안에는 프로젝트의 상태 데이터가 담겨있다. (앱 상태, Reducer 및 추가 내장 함수 등이 들어있다)

2.4.1. dispatch

내장 함수 중 하나로 액션을 발생시켜 스토어 상태를 변경하라고 알려주는 것이다. dispatch(action)처럼 액션을 파라미터로 전달한다. 그러면 스토어는 Reducer 함수를 실행시켜서 해당 액션을 처리하는 로직이 있다면 액션을 참고하여 새로운 액션을 만든다.

2.4.2. subscribe

역시 내장 함수 중 하나로 컴포넌트의 스토어 구독에 관련된 일을 한다.함수 형태의 값을 파라미터로 받아오는데, subscribe에 특정 함수를 전달하면 액션이 dispatch 될 때마다 전달한 함수가 호출된다.


3. 규칙

하나의 애플리케이션 안에는 하나의 스토어가 있다. 여러 스토어를 만들 수도 있지만...

상태은 읽기 전용이다. 기존의 상태는 건드리지 않고 새로운 상태를 생성한 후 교체하는 방식이다. 이러한 불변성을 유지하는 이유는 내부적으로 데이터 변경을 감지하기 위하여 shallow equality 검사를 하기 때문이다.

Reducer는 순수한 함수여야 한다. 순수한 함수란 동일 inout - 동일 output 이여야 한다.