우리는 redux
를 들어본 적이 있다. 리덕스는 전역 상태
를 생성하고 관리하기 위한 상태관리 라이브러리이다.
오늘은 공부했던 것 토대로 redux
의 특징 세 가지와 필요한 이유에 대하여 살펴보자.
동알한 데이터는 항상 같은 곳에서 가지고 온다. 애플리케이션의 모든 상태는 하나의 저장소 안에 하나의 객체 트리 구조로 저장된다.
기존에 내가 작성했던 코드의 방식은
Single source of truth
가 컴포넌트 트리의 최상단에 위치해서state
를props
를 통해 내려주었다. 이를Props Drilling
이라고 한다.Props Drilling
을 피하기 위한 방법은 여러가지가 있는데, 그 중 하나가 리덕스를 사용하는 것이다. 리덕스의 가장 큰 특징 중 하나는single source of truth
가 컴포넌트 트리와 별개인 곳에 존재한다는 것이다. 리덕스를 통해state
를 관리하면App
에서state
를 저장하지 않아도 된다.
리덕스에서는 액션이라는 객체를 통해서만 상태를 변경할 수 있다. 모든 상태 변화는 중앙에서 관리되며 모든 액션은 엄격한 순서에 의해 하나하나 실행된다. 액션은 그저 평범한 객체이다.
액션에 의해 상태 트리가 어떻게 변화하는 지를 지정하기 위해 순수 리듀서를 작성해야 한다.
리듀서는 그저 이전 상태와 액션을 받아 다음 상태를 반환하는 순수 함수이다.
위에서 말했던 것처럼 여러 컴포넌트가 동일한 상태를 보고 있을 때 유용하다. 컴포넌트 트리의 최상단에 위치해서 state
를 props
로 내려주는 Props Drilling
을 피할 수 있다. 그러므로 상태 구성 요소들을 보다 효율적으로 관리할 수 있게 된다.
즉, 리덕스를 사용하면, 상태값을 컴포넌트에 종속시키지 않고, 상태관리를 바깥에서 할 수 있게 해준다.
상태관리하는 로직을 담당하는 폴더 구조를 생성하여 모듈화를 해주면 코드 가독성에 좋고, 관리가 쉽다.
또, 데이터를 관리하는 로직을 컴포넌트에서 빼면, 컴포넌트는 정말 뷰만 관리할 수 있게 된다. 그렇다면 코드는 훨씬 깔끔해져 유지보수에 용이하다.
이제 context API와 다른점에 대해 알아봐야겠다.