React를 사용해 웹 애플리케이션을 개발하면, 사용자 이벤트를 통해 해당 컴포넌트나 다른 컴포넌트에 변화를 줄 수 있다.
이것만으로도 프로젝트를 진행 할 수 있지만, Redux를 사용하면 컴포넌트와 상태를 분리하여 표현에 집중한, 보다 단순한 함수 컴포넌트로 만들 수 있게 된다.
이 부분에서 Redux가 React에 종속된 하위 라이브러리라고 오해할 수 있지만, Redux는 React없이도 사용할 수 있는 상태 관리 라이브러리
이다.
React만을 사용한 애플리케이션에서는 몇가지 비효율적인 부분이 있는데,
Redux는 상태가 변경되어야 하는 이벤트가 발생하면, 변경될 상태에 대한 정보가 담긴 Action 객체가 생성되고, 이 Action 객체는 Dispatch 함수의 인자로 전달되며 Dispatch 함수는 Action 객체를 Reducer 함수로 전달해준다. Reducer 함수는 Action 객체의 값을 확인하고, 그 값에 따라 전역 상태 저장소 Store의 상태를 변경한다. 상태가 변경되면, React는 화면을 다시 렌더링 한다.
즉, Redux는 데이터가 Action → Dispatch → Reducer → Store 으로 단방향으로 흐른다.
Redux에는 세가지 원칙이 있다.