src/index.js
→ 스토어 제작 & 리액트 app에 리덕스 적용 작업 import React from 'react';
import ReactDOM from 'react-dom';
import { createStore } from 'redux'; // 추가
****import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import rootReducer from './modules'; // 추가
****
const store = createStore(rootReducer); // 추가
****
ReactDOM.render(<App />, document.getElementById('root'));
serviceWorker.unregister();
<Provider>
사용)<App/>
를 <Provider>
로 감쌈<Provider>
Redux DevTools
적용 const store = createStore(
rootReducer,
**window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__(),**
);
import { composeWithDevTools } from 'redux-devtools-extension';
const store = createStore(rootReducer, composeWithDevTools());
src/containers
& connect
함수src/containers
에 container 컴포넌트 생성 connect
함수(react-redux 제공) 사용connect
함수 connect(mapStateToProps, mapDispatchToProps)(연동할 컴포넌트)
mapStateToProps, mapDispatchToProps
에서 반환하는 객체 내부 값들
컴포넌트의 props로 전달
mapStateToProps
란?스토어의 상태를 컴포넌트의 props로 넘겨주기 위한 함수
mapDispatchToProps
란?액션 생성 함수를 컴포넌트의 props로 넘겨주기 위한 함수
connect 함수 호출 → 다른 함수 반환 → 반환된 함수의 parameter: 컴포넌트
⇒ 리덕스와 연동된 컴포넌트 만들어짐
import React from 'react';
import { connect } from 'react-redux';
import Counter from '../components/Counter';
import { increase, decrease } from '../modules/counter';
const CounterContainer = ({ number, increase, decrease }) => {
return (
<Counter number={number} onIncrease={increase} onDecrease={decrease} />
);
};
// mapStateToProps, mapDispatchToProps 선언
const mapStateToProps = (state) => ({
number: state.counter.number,
});
const mapDispatchToProps = (dispatch) => ({
increase: () => {
dispatch(increase());
},
decrease: () => {
dispatch(decrease());
},
});
export default connect(mapStateToProps, mapDispatchToProps)(CounterContainer);
bindActionCreators
사용 import { bindActionCreators } from 'redux';
export default connect(
(dispatch) =>
bindActionCreators(
{
increase,
decrease,
},
dispatch,
),
)(CounterContainer);
mapDispatchToProps
에 해당하는 파라미터: 액션 생성 함수로 이루어진 객체 형태connect
함수가 bindAtionCreators
처리 export default connect(
(state) => ({
number: state.counter.number,
}),
{
increase,
decrease,
},
)(CounterContainer);