지금까지는 redux 튜토리얼이었다. 이제 redux에서 생성한 store를 리액트에 어떻게 주입하고 subscribe 와 publish (action dispatch)를 리액트에서 어떻게 하는지 살펴보자.

먼저 redux를 react에 적용하도록 도와주는 react-redux 라이브러리를 설치한다.

Provider

생성된 store를 리액트에 주입하기 위해서 Provider를 사용한다.

모듈화

하나의 화일에 만든 redux 구조를 패턴화 한다.

+ Q: ducks 패턴이란?

ducks 패턴이란 action type 과 action creator 그리고 reducer를 모두 하나의 화일에 보관하는것을 말한다. OOP의 Single Responsibility 원칙에 어긋나는것 처럼 보인다. 하지만 action type과 action creator는 reducer에서만 사용되므로 셋을 합쳐서 하나의 SRP라고 생각하자.

+ redux/reducers/userReducer.js 생성

index.js에 있는 userReducer를 잘라내서 해당화일로 가져온다.

그리고, 액션 type과 action creator를 모두 정의한다. action은 객체이고 action type은 스트링이다. action creator는 action을 만드는 함수이다.

+ redux/reducers/counterReducer.js

index.js에 있는 counterReducer를 잘라내서 해당화일로 가져온다. 마찬가지로 action type과 action creator를 생성한다.

+ redux/reducers/index.js : index.js에 있는 allReducers를 잘라내서 해당화일로 가져온다.

+ redux/store.js : index.js에서 store 생성부분을 잘라서 가져온다

+ index.js : 모듈화하고 남은 index.js

count state 변경 및 바인딩 테스트

+ component/Counter.jsx 생성

store의 count 상태를 변경하고 그리고 값을 가져와서 바인딩하는 테스트를 한다.

App 컴포넌트에는 자식 컴포넌트인 Counter.jsx 컴포넌트를 포함한다.

user state 변경 및 바인딩 테스트

+ component/User.jsx 생성

store의 user 상태를 변경하고 그리고 값을 가져와서 바인딩하는 테스트를 한다.

App 컴포넌트에 자식 컴포넌트인 User.jsx 컴포넌트를 포함한다.

redux hooks 적용하기

react-redux 7.1.0 이후부터 react redux hooks가 도입되었다.

connect 로 HoC 컴포넌트를 만든후 component 트리를 보게 되면 많은 래퍼 컴포넌트가 중첩이 된것을 볼 수 있는데, 이제 그런 래퍼 컴포넌트 중첩없이 간단하게 사용할 수 있게 되었다.

useSelector가 connect 펑션의 첫번째 파라메터를 대체하고,

useDispatch가 connect 펑션의 두번째 파라메터를 대체한다.

그리고 connect 하는 더이상의 HoC 래퍼 컴포넌트는 없다.

– quiz