크로스 컴포넌트 또는 앱 와이드 상태를 위한 생태 관리 시스템이다.
먼저, 상태(state)는 세 가지로 구분된다.
리액트 컨텍스트 또한 상태 관리 시스템인데 왜 리덕스가 필요할까?
리액트 컨텍스트는 잠재적인 단점이 몇개 있다.
Redux는 애플리케이션에 있는 하나의 중앙 데이터 저장소이다.
여기서 데이터는 상태를 가르킨다.
애플리케이션은 한 개의 저장소만 갖게되며 그 저장소에 전체 애플리케이션의 모든 상태를 저장한다.
그렇다면 관리가 어려울 것 같지만 Redux는 다행히 그 저장소 전체를 항상 직접 관리할 필요가 없다.
컴포넌트는 중앙 저장소에 있는 데이터(상태)의 변화를 감지하여 그에 맞는 대응을 하기위해 구독(Subscription) 을 설정한다.
컴포넌트가 저장소를 구독하면 데이터가 변경될 때마다 컴포넌트에게 알려주게 된다.
컴포넌트가 구독을 통해 받은 데이터는 변경이 필요하기도하다.
저장된 데이터를 어떻게 변경할까? 여기엔 아주 중요한 규칙이 있다.
컴포넌트는 절대로 저장된 데이터를 직접 조작하지 않는다.
그래서 구독을 하는 것이고 직접적은 흐름으로 봤을때 데이터는 절대로 반대 방향으로 흐르지 않는다.
그 대신 리듀서(Reducer) 라는 개념을 이용한다.
이 리듀서 함수를 설정하고 이 함수는 저장소 데이터의 변경, 즉 업데이트를 담당한다.
구독과 Reducer가 있다. 이제 컴포넌트와 그 Reducer 함수를 어떻게 연결할까?
액션(Action) 이라는 개념이 있으며 컴포넌트가 액션을 발송한다.
예를 들면 어떤 컴포넌트 버튼이 있고 클릭 시 상태를 변경하는 함수를 실행하듯 컴포넌트가 어떤 액션을 트리거한다 말할 수도 있다.
액션은 단순한 자바스크립트 객체이며 Reducer가 수행해야 할 작업을 설명하게 된다.