순수 리액트에서 어플리케이션을 만들땐, 일반적으로 루트 컴포넌트 하나(App.js)에서 상태를 관리한다. 그러한 대부분의 프로젝트에서는 부모 컴포넌트가 중간자 역할을 한다. 자식컴포넌트는 부모컴포넌트와만 소통을 하고, 내부 컴포넌트끼리는 직접 소통하지 않고 않아야 한다.
따라서 위의 구조대로라면, 부모 컴포넌트에서 모든걸 관리하고 아래로 내려주는 것이다. 이의 장점은 직관적이고 관리의 편리함에 있다. 다만 앱의 규모가 거대해질 수록 위의 문제는 복잡해진다.
위의 사진대로 G컴포넌트에 값을 전달하기 위해 Root부터 시작하여 A, E G를 거쳐야 한다.
이런 무시무시한 모습을 방지하기 위해 사용하는 것이 리덕스이다.
리덕스는 상태관리를 컴포넌트 바깥에서 하여 개별의 컴포넌트가 직접 소통하여 데이터를 받아올 수 있다.
이렇게 리덕스 상태관리 모음은 리덕스 스토어라고 부르는데, 상태에 변화가 생기면 소통 중인
컴포넌트에게 알려 리렌더링을 하게 한다.