리덕스가 등장하기 이전에 데이터 흐름을 관리 하는 방식 (상태 관리 방식)은 MVC 패턴이었다.
MVC 패턴은 프로그램을 개발할때 사용하는 디자인 패턴 중 하나이다.
MVC 패턴의 큰 특징중 하나가 데이터 흐름이 양방향으로 흐른다는 것이다.
양방향으로 흐른다는 것은, 모델이 변경되면 뷰도 변경되고, 사용자에 의해 뷰가 변경된다면 컨트롤러도 변경된다는 뜻이다.
이런 MVC 패턴은 설계하기가 간편하고 코드 작성하기가 쉽다는 장점이 있지만, 애플리케이션의 규모가 커질수록 데이터 흐름을 파악하기가 되게 어렵다는 문제점이 발생한다.
페이스북측에서 이러한 문제점을 해결하기 위해서 2014년에 Flux패턴이라는 새로운 아키텍쳐 패턴을 만들었고, 2015년에는 Dan Abramov에 의해 React + Flux 에 Reducer 를 결합한 Redux가 탄생한다.
위의 패턴들의 특징은, 데이터들이 양방향이 아닌 단방향으로 흐른다는 것이다.
Redux => Redu(cer) + (Fl)ux
데이터 변경은 Reducer 함수로 인해 일어나며, 변경된 데이터는 Store에 저장된다. 그리고 이 Store에 변경된 데이터들이 모두 저장되어서 상태 변경이 발생한다.
상태를 변화시키기 위해서는 Reducer에 action 객체를 전달해야한다.
View에서 일어나는 이벤트는 직접 상태를 변경하면 안된다. 데이터 변경은 오직 Reducer가 할수 있다.
Reducer 이외의 공간에서의 데이터는 읽기 전용이다.
- 순수함수란 ?
- 함수가 어디서든 언제든, 외부의 상태를 변경하지 않으면서 동일한 입력값을 받는다면 동일한 결과값을 반환해야한다.
모든 프로젝트에 리덕스를 도입할 필요는 없다. 예를 들어 폼 유효성 검증에서의 상태관리는 해당 컴포넌트 안에서만 관리하는 것이 낫다. 폼 컴포넌트가 언마운트되면 폼상태를 유지할 필요가 없고, 폼 유효성 상태는 해당 컴포넌트 밖에서 공유하지 않기 때문이다.
위의 규칙들중에 몇가지가 해당된다면 리덕스 도입을 고려해볼 필요가 있다.