어떤 컴포넌트에서 생성한 state를 다른 컴포넌트로 보고자 할 때, props
를 통해서 부모 컴포넌트에서 자식 컴포넌트로 값을 넘겨주었다. 그런데 props로 state를 공유하는 방법에는 불편한 점이 몇가지 있다.
useContext (context API)를 사용함으로서 상태관리를 할 수 있었지만, 조심해야 되는 부분 이 있었다. → 자식 컴포넌트의 state가 변경이 되면 모든 컴포넌트가 리렌더링 된다.
위의 문제점들을 해결할 수 있는 도구가 리덕스!
리덕스를 사용하면 state를 공유하고자 할 때 부-모 관계가 아니어도 되고, 중간에 의미없이 컴포넌트를 거치치 않아도 된다. 그리고 자식 컴포넌트에서 만든 state를 부모 컴포넌트에서도 사용이 가능하다.
컴포넌트에서 useState를 이용해서 생성한 state!
좁은 범위 안에서 생성된 State 라고 생각하면 된다.
Global state는 컴포넌트에서 생성되지 않는다.
중앙화 된 특별한 곳에서 State들이 생성!
좀 더 쉽게 얘기해서 “중앙 state 관리소” 라고 생각하면 된다.
중앙 State관리소에서 State를 생성하고, 만약 어떤 컴포넌트에서 State가 필요하다면 컴포넌트가 어디에 위치하고 있든 상관없이 State를 불러와서 사용 할 수 있게 됩니다. 이렇게 특정 컴포넌트에 종속되어 있는 것이 아니라 “중앙 state 관리소”에서 생성된 State를 Global state라고 합니다. 그리고 이러한 값들을 관리하는 것을 전역 상태 관리 라고 합니다.
리덕스란,
우리가 위에서 말한 “중앙 state 관리소”를 사용할 수 있게 도와주는 패키지(라이브러리)
“중앙 state 관리소" 를 통해서 State를 관리한다는 아이디어는 굉장히 좋으나, 그것을 직접 구현하기는 아직 어렵다. 패키지(라이브러리)의 도움을 받아 그것을 구현해볼 수 있다.
프론트엔드 개발자들은 “리덕스”를 전역 상태관리 라이브러리 라고 많이 표현하는데,
전역 상태, 즉 Global State를 의미하고 그것을 관리하게 도와주는 라이브러리 (패키지) 이기 때문!
useState
를 통해 상태를 관리했을 때 발생하는 불편함을 일부 해소useState
로 생성한 state는 Local State, 리덕스에서 생성한 state는 Global State