Redux는 Flux개념을 바탕으로한 React에서 현재 가장 많이 사용되는 State관리 라이브러리.
State : React Component에서 변경가능한 데이터
Flux : https://haruair.github.io/flux/docs/overview.html
React는 React컴포넌트에서 개별적으로 state
를 관리한다. 그러나 Redux를 사용하면 state
를 별도의 전용 장소인 store
에서 상태를 관리하고 React Component에서는 그걸 보여주기만 하는 용도로 사용한다.
앞에서 말한것과 같이 Redux는 store
를 통해 상태를 한 곳에서 관리하는데 이것을 "상태의 중앙화"라고 한다. 상태의 중앙화로 다음과 같은 이점을 얻을 수 있다.
props
를 통해 관리하지 않고 store
에서 관리하면 된다.state
를 쉽게 저장하고 불러올 수 있다.store
에서만 관리하게 되면서 상태를 한 군데만 저장해서 관리하면 된다.Rudux는 상태를 읽기 전용으로 취급한다. 상태를 변경하기 위해서는 상태 일부를 변경하는 것이 아니라 상태 전체를 변경해야 한다. 이로 인해 다음과 같은 이점을 얻을 수 있다.
Rudex Undo
라이브러리를 통해 실행 취소 기능을 제공한다.Redux는 상태를 변경하는 도중 부수 효과(side effect)가 일어나지 않도록 코딩하기를 권장한다. 이와 함께 상태를 변경하려는 시도를 복제 저장, 전송할 수 있도록 자바스크립트 객체 형태로 구성하기를 강제한다. 이 때 부수 효과 없이 상태를 변경하는 함수를 Reducer
라고 하며, 상태 변경을 어떻게 할 것인지 정보를 담은 자바스크립트 객체를 Action
이라고 한다.
부수효과(side effect) : 함수가 실행될 때 매개변수가 아닌 다른 값에 따라 반환값이 바뀌는 것.
Reducer와 Action을 통해 다음과 같은 이점을 얻을 수 있다.
Action
만 가지고 상태가 어떻게 변화할지 완벽하게 예상할 수 있다.Action
의 일부를 제외하고 다시 실행하더라도 어떤 일이 벌어질지 예상하기 쉽다.React를 배우고 Readux를 배우기 시작하면 러닝커브가 높아진다. 이에 재밌는 글이 있어 공유한다.
Redux는 일반적인 라이브러리나 프레임워크가 아니다. 리덕스만의 설계 철학과 함께 철학을 쉽게 따를 수 있도록 여러 도구를 지원해주는 개발도구다. 설계 철학을 따른다는 것은 그냥 라이브러리를 사용하는 것과는 완전히 다른 문제다.
Redux를 사용함으로 인해 여러가지 강력한 장점을 얻을 수 있다. 하지만 Redux의 철학이 강제하는 방식으로 인해 오히려 코드가 복잡해지거나 코드를 작성하기 어려워질 수도 있다. Redux 탄생 배경을 이해하고 Redux가 제공하는 여러 장점이 필요한 상황이 아니라면 다른 라이브러리나 프레임워크를 사용하는 것이 더 나을수도 있다.