Redux
앱 전체 상태를 쉽게 관리하기 위한 라이브러리 이다.
핵심 원칙
- Single soure of truth
Store는 단 하나이며, 모든 앱의 상태는 이 곳에 보관된다.
- Immutability
상태는 오로지 읽을 수만 있다. 상태를 변경하려면 모든 상태가 변경되어야 한다.
- Pure function
상태의 변경은 어떠한 사이드 이펙트도 만들지 않아야 한다.
Redux를 써야하는 경우
- 앱 전체의 상태 관리가 필요할 때
- 복잡한 비동기 처리가 있는 상태 관리가 필요할 때
- 앱의 상태가 복잡하고, 이를 체계적으로 관리하고 싶을 때
- 상태 관리 패턴을 도입하여, 여러 개발자와 협업하고 싶을 때
- logger, devtool 등을 활용하여 상태를 관리할 필요가 있을 때
Redux 관련 용어
- Action : 상태의 변경을 나타내는 개념
어떤 형태든지 상관없으나 주로 "type", "payload"를 포함하는 js 객체이다.
- Action Creator : Action을 생성하는 함수
직접 Action을 생성하는 것보다 Action Creator를 활용하면 재사용성도 좋고 하나의 레이어를 추가할 수 있다. (이게 무슨 말이지)
- Store : 애플리케이션의 상태(state)를 객체형식으로 저장하는 장소
action 에 따라 reducer에서는 새로운 상태를 만들어내며, Sotre는 그 상태를 저장한다.
store의 상태는 불변하며, 매 액션이 발생할 때마다 새로운 객체가 만들어진다.
- Reducer : Action을 받아서 새로운 State를 만드는 함수
(state, action) => state의 인터페이스를 따른다.
상태 변경 시 사이드 이펙트가 없어야 한다.
- Dispatch: Action을 redux로 보내는 함수
dispatch 후에 action은 middleware를 거쳐서 reducer에 도달하게 된다.
- Selector : 특정 state조각을 store로부터 가져오는 함수
store의 state는 raw data를 저장하고, 계산된 값 등을 selector로 가져오는 등의 패턴을 구사할 때 유용하다.