본문 바로가기
Frontend

13. React-Redux

by yongmin.Lee 2020. 11. 6.

React-Redux란?

- Redux를 React App에서 효율적으로 사용하기 위해 여러 유틸함수와 Provider 컴포넌트를 제공하는 라이브러리

Presentational Component and Container Component Patterns

- 리액트 프로젝트에서 리덕스를 사용할 때 가장 많이 사용하는 패턴

- Presentational Component : 상태관리가 이루어지지 않고, 그저 props를 받아서 화면에 UI를 보여 주기만 하는 컴포넌트

- Container Component : 리덕스와 연동되어 있는 컴포넌트로, 리덕스로부터 상태를 받아오거나 리덕스 스토어에 액션을 디스패치한다.

- 리액트 프로젝트에 리덕스를 적용하여 업데이트에 관련된 로직(container)리액트 컴포넌트(presentational)에서 분리 시킬 수 있으므로 유지 보수성이 높은 코드를 작성할 수 잇다

Ducks 패턴

- 리덕스에 필요한 액션타입, 액션생성함수, 리듀서함수를 파일 하나에 몰아서 다 작성하는 방식.

- 리듀서 함수는 export default 키워드로 내보낸다.

- 액션 생성자 함수 및 액션타입은 export 키워드로 내보낸다.

- ducks 패턴을 사용하여 액션타입, 액션생성함수, 리듀서를 작성한 코드를 '모듈'이라고 한다.

Provider

- 리액트 컴포넌트에서 스토어를 사용할 수 있도록 App 컴포넌트를 Provider 컴포넌트로 감싼다. 이때, store를 Provider의 props로 전달해야한다.

- Provider 컴포넌트는 react-redux에서 제공

컨테이너 컴포넌트와 리덕스 연동

1. connect()

2. useSelector, useDispatch()

connect()

- 컨테이너 컴포넌트리덕스연동하려면 'react-redux'에서 제공하는 connect 함수를 사용해야한다

- connect( mapStateToProps, mapDispatchToProps)(연동할 컴포넌트)

- mapStateToProps : 리덕스 스토어 안의 상태를 컴포넌트의 props로 넘겨주기위해 설정하는 함수 

- mapDispatchToProps : 액셩생성함수를 컴포넌트의 props로 넘겨주기위해 설정하는 함수

- connect 함수를 사용하여 컨테이너를 만들경우, 해당 컨테이너 컴포넌트의 부모 컴포넌트가 리렌더링 될 때 해당 컨테이너 컴포넌트의 props가 바뀌지 않았다면 리렌더링이 자동으로 방지되어 성능이 최적화된다

useSelector() , useDispatch()

- useSelector : 리덕스 상태조회

- useDispatch : 컴포넌트 내부에서 스토어의 dispatch를 사용할 수 있게 해준다. 

- useSelect와 useDispatch로 컨테이너컴포넌트를 리덕스에 연동하여 만들면 connect()를 쓸때와 달리 최적화 작업이 자동으로 이루어지지 않으므로 성능최적화를 위해 React.memo를 컨테이너 컴포넌트에 사용하여 최적화를 해줘야 한다

 

 

 

'Frontend' 카테고리의 다른 글

JS 데이터 타입  (0) 2020.11.07
14. Redux-middleware  (0) 2020.11.06
12. Redux  (0) 2020.11.06
11. Asynchrony (비동기작업)  (0) 2020.10.25
10. SPA 와 Routing  (0) 2020.10.25