- 작업 환경 설정
- UI 준비하기
- 리덕스 관련 코드 작성하기
- 리액트 래플리케이션에 리덕스 적용하기
- 컨테이너 컴포넌트 만들기
- Hooks를 사용하여 컨테이너 컴포넌트 만들기
프리젠테이셔널 컴포넌트
컨테이너 컴포넌트
를 분리하는 것프리젠테이셔널 컴포넌트
src/components
컨테이너 컴포넌트
src/containers
conbineReducers
유틸 함수 사용src/index.js
에 생성composeWithDevTools
를 createStore()
의 두 번째 파라미터에 넣는다.connect
함수
👉 connect(mapStateToProps, mapDispatchToProps)(연동할 컴포넌트)
mapStateToProps
: 리덕스 스토어 안의 상태를 컴포넌트의 props로 넘겨주기 위해 설정하는 함수
mapDispatchToProps
: 액션 생성함수를 컴포넌트의 props로 넘겨주기 위해 사용하는 함수
❖ 반환된 함수에 컴포넌트를 파라미터로 넣어주면 리덕스와 연동된 컴포넌트가 만들어진다.
❖ 익명함수 형태로도 가능
bindActionCreators
유틸 함수
mapDispatchToProps
에 해당하는 파라미터를 액션 생성함수로 이루어진 객체 형태로 넣어준다. createAction
으로 액션을 만들면 액션에 필요한 추가 데이터는 payload
라는 이름을 사용한다.payload
라는 이름으로 사용하기 떄문에, action.id
, action.todo
를 조회하는 대신, 모두 공통적으로 action.payload
값을 조회하도록 리듀서 구현immer
을 사용하면 코드를 더 간단(?)하게 나타낼 수 있다.connect
함수 사용 대신 Hooks 사용const 결과 = useSelector(상태 선택 함수)
mapStateToProps
와 형태가 같다.useCallback
하고 같이 사용useSelector
로 리덕스 상태를 조회 했을 때는 최저화 작업이 자동으로 이루어지지 않으므로, 성능 최적화를 위해서는 React.memo()
를 컨테이너 컴포넌트에 사용해 줘야한다.