리덕스는 어떤 원리로 작동되는가? 이것을 알아보기전에 한 가지 알아야 할 것이 있다면, 리덕스는 Central Data Store(중앙 데이터 관리실)를 가진다는 것이다. 리덕스를 사용하는경우 하나 이상의 Store를 가지지 않는다는 점을 유의하자.
그렇다면, 우리는 이 하나의 스토어를 가지고 무엇을하는가?
우리는 Store를 가지고 무얼하는가? :
결론적으로 말하자면, 이 스토어안에 데이터를 저장하고, 다른 컴포넌트들은 이 스토어안에 있는 데이터를 받아와서 사용한다.
이렇게 스토어에 있는 데이터를 컴포넌트가 받아와서 사용하는 행위를 Subscription이라고 한다. 컴포넌트는 스토어에 Subscription 을 하고, 이렇게 했을 경우 스토어안에 있는 데이터가 변경될 때마다, 스토어는 구독중인 컴포넌트들에게 알려준다. 덕분에 컴포넌트들은 즉각적으로 본인들이 원하는 데이터를 받을 수 있게 된다.
중앙 데이터(Store)의 state를 변경하는 법 :
그렇다면 또 궁금한 점이 생긴다. 중앙에 모여있는 이 스토어의 데이터는 어떻게 변경할 수 있는가? 컴포넌트가 변경하는가?
아니. 절대 컴포넌트는 중앙에 있는 store의 데이터에 직접적으로 접근할 수 없다. 컴포넌트는 절대 직접 중앙에 있는 데이터를 조작할 수 없으며, 컴포넌트가 중앙 데이터를 조작하기 위해서 반드시 거쳐야 하는 관문은 reducer이다.
Reducer가 하는 일 :
이 reducer는 Mutates Store Date에 대해 책임이 있다. reduce라는 개념은 개발을 하면서 통상 들어볼 수 있는 개념이다. 이는 보통 여러가지 데이터를 가공해서 또 다른 아웃풋을 만들어 낸다는 개념이다. 이런 개념은 리덕스에서 사용하는 reducer에서도 동일하게 적용된다는 사실을 기억하자.
그래서 컴포넌트에서 어떤 행위가 일어났을 때 데이터를 변경해야하는데, 뭘 어떻게 해야한다는 말일까? 컴포넌트에서 어떤 이벤트가 일어났을 때, 데이터를 변경해주는 action을 불러오기 위해서 dispatch가 존재한다. dispatch는 액션을 불러와주고, 이 액션은 리듀서에게 전달된다. 그러고나 나면 reducer는 이 action이 원하는 것이 뭔지를 파악한다. 그리고 원하는 행동에 따라 state를 변화시켜주고, 새로운 state를 Store에 spit out한다.
자, 그러면 또 무슨일이 일어날까? 중앙관리실에서 데이터가 변경되었다. 중앙관리실(store)를 구독중이던 컴포넌트들에게 이 사실을 전달한다. '야 데이터가 변경되었다!' 결론적으로 컴포넌트들은 그들의 UI를 업데이트 할 수 있게 된다.
전체적인 관점에서 봤을 때, 이 흐름을 그림으로 보면 다음과 같다.
'React' 카테고리의 다른 글
[리액트] 왕초보 개발자의 웹성능 최적화 수기 (0) | 2021.09.04 |
---|---|
[React] image 파일 압축해서 FormData형식으로 서버에 보내기 (0) | 2021.08.05 |
[react] state의 3가지 정의, 리액트 콘텍스트의 2가지 단점 (0) | 2021.07.10 |
[React] 라우팅이란 (0) | 2021.06.28 |
[React] ref사용하기 (0) | 2021.06.28 |