상태 관리가 잘 이루어지지 않을 경우, 프롭스 드릴링(Prop Drilling) 문제를 발생시킬 수 있습니다. 이는 컴포넌트 간의 의존성을 높히기 때문에 의존성을 낮춰야만 데이터 흐름과 이벤트 처리를 쉽게 할 수 있습니다.
리덕스는 이러한 프롭스 드릴링 문제를 해결하는 데 매우 유용한 도구입니다.
리덕스는 복잡한 애플리케이션의 상태 관리 및 데이터 흐름을 단순화하기 위한 JavaScript 라이브러리입니다. React와 함께 자주 사용되며, 전역 상태 관리의 필요성을 해결해줍니다. 이 글에서는 리덕스의 구조와 사용법, 그리고 리액트와의 관계에 대해 살펴보겠습니다.
리덕스는 데이터의 흐름을 일방향으로 유지하는 구조를 가지고 있습니다. 이를 통해 다음과 같은 과정을 거쳐 상태가 관리됩니다:
1. 액션 생성: 사용자의 상호작용으로 발생하는 이벤트에 대한 액션이 생성됩니다.
2. 액션 디스패치: 액션이 스토어에 전달되며, dispatch()
함수를 통해 호출됩니다.
3. 리듀서 호출: 현재 상태와 디스패치된 액션이 리듀서에 전달되어 새로운 상태를 반환합니다.
4. UI 업데이트: 상태가 변경되면, 관련 컴포넌트가 다시 렌더링되어 UI를 업데이트합니다.
type
속성을 가져야 하며, 추가적인 데이터(payload)를 포함할 수 있습니다.리덕스 3가지 원칙
1. 진실은 하나의 근원으로부터
애플리케이션의 모든 상태는 하나의 저장소 안에 하나의 객체 트리 구조로 저장됩니다.
=>스토어를 객체로 만들어라!2. 상태는 읽기 전용이다
상태를 변화시키는 유일한 방법은 무슨 일이 벌어지는 지를 묘사하는 액션 객체를 전달하는 방법뿐입니다.
=>모든 상태는 스토어에서 관리되며, 단순한 '액션'이라는 객체에 담아서만 상태를 변경한다.3. 변화는 순수 함수로 작성되어야한다
액션에 의해 상태 트리가 어떻게 변화하는 지를 지정하기 위해 프로그래머는 순수 리듀서를 작성해야합니다.
=>동일한 입력에 대해 항상 같은 결과를 반환하는 함수로 리듀서를 작성해야 됩니다.