flux란 기존 MVC 패턴의 한계를 극복하기 위해 만들어진
새로운 웹개발 패턴이다.
위 그림은 기존 MVC 패턴의 한계를 설명한다.
MODEL과 VIEW가 양방향으로 서로에게 영향을 줄 수 있으므로
MODEL과 VIEW의 수가 증가할수록 디버깅하기 어려워진다.
반면 flex는 단방향의 data 흐름을 가진다.
따라서 앱의 규모가 커져도 MVC에 비해 디버깅하기 쉽다.
flux는 4가지 개념으로 구성되어 있다.
각각은 단방향으로 data가 흘러가도록 역할을 수행한다.
Action은 View에서 발생하며 Dispatcher에게 전달된다.
보통 click 등 여러 유저 행동을 나타낸다.
Action을 Store에게 전달하는 역할을 한다.
Dispatcher에게 Action을 전달받아서 상태를 변화시킨다.
변화시킨 상태를 저장하는 저장소이기도 하다.
Store에게 상태를 전달받아 렌더링하는 역할을 담당한다.
flux에서 Store는 2가지 역할을 담당한다.
따라서 개발자가 개발하며 state 변화 로직을 수정하면
기존에 저장되어 있던 state가 전부 새로고침되어 사라진다.
이러한 한계를 극복하기 위해 Redux가 등장했다
어떻게 flux의 한계를 극복했느냐
store를 reducer와 store로 분리하여 극복했다.
기존 flux의 store가 수행하던 2가지 역할을 나눠 수행한다.
위 2가지 개념에 덧붙여, 기존 flux에서 몇몇 개념이 추가 및 수정되어
아래와 같은 개념 목록으로 Redux가 구성되었다.
위와 같은 상황에서 redux가 동작하는 과정은 아래와 같다.
action type
을 상수로 정의한다action creator
를 정의한다(action 객체 생성 함수)action
이 reducer
에서 어떻게 state
를 바꿀지 정의한다reducer
와 action
을 input으로 store
를 생성한다Provider
를 통해 모든 component
를 store
에 접근할 수 있도록 만든다action
을 mapDispatchToProps
를 통해 A component
에게 전달한다A component
에서 props
를 활용해 state
를 변화시키는 action
을 dispatch
를 통해 reducer
에게 전달한다reducer
는 기존 state
와 action
을 받아서 바뀐 state
값을 store
에게 전달한다store
에 저장되어있는 바뀐 state
값을 mapStateToProps
를 통해 B component
에게 전달한다state
를 props
로 받아 B component
가 렌더된다