리덕스의 데이터는 한방향으로만 흐른다.
- 하나의 중앙 데이터 store를 갖습니다. (이때 데이터는 state(상태)를 말합니다.)
- 상태값을 변경해야할 때 데이터들의 state 값을 수정해줄 reducer 함수를 만듭니다.
- dispatch를 사용하여 reducer에게 state 값을 수정하라고 action 값과 함께 요청합니다.
- reducer가 state값을 수정하면, subscribe를 사용하여 수정된 부분을 UI에 업로드합니다.
{type: 'LIKE_ARTICLE', articleId: 42}type에 의해 LIKE_ARTICLE이라고 설명한다.{type: 'FETCH_USER_SUCCESS', response: {id:3, name:'gyul'}}(previousState, action)=> nextStatenpm i redux react-redux redux-promise redux-thunk --save📖 redux-thunk
- dispatch에게 어떻게 function을 받는지 방법을 알려줌
📖redux-promise
- dispatch에게 promise가 왔을 때 어떻게 대처해야 하는지 알려줌
👩🏻💻 둘다 리덕스를 더 잘 사용할 수 있도록 하기 위한 middleware !!
1. App에 리덕스를 연결시켜주기 위해서 Provider로 감싸준다.
⭐ client > index.js
import { Provider } from 'react-redux'
root.render(
<Provider>
<App />
</Provider>
);
2. redux-promise와 redux-thunk,store을 정의한다.
⭐ client > index.js
import { applyMiddleware, createStore } from 'redux';
import promiseMiddleware from 'redux-promise';
import ReduxThunk from 'redux-thunk'
const createStoreWithMiddleware= applyMiddleware(promiseMiddleware, ReduxThunk)(createStore);
root.render(
<Provider store={createStoreWithMiddleware}>
<App />
</Provider>
);
3. reducer 및 redux extension 연결
⭐ client > _reducers > index.js
import { combineReducers } from "redux";
const reducers= combineReducers({
})
export default reducers;
👩🏻💻여기서
combineReducers은 무엇일까?하나의 sotre 안에는 여러개의 reducers가 존재할 수도 있다. 예를들어,
유저 정보 reducer, 게시글 정보 reducer 등등그런데 store에서 단 1개의 reducer만 받을 수 있기 때문에 combineReducers을 이용하여 root reducer에서 하나로 합쳐주는 것이다.
⭐ client > index.js
import Reducer from './_reducers';
const createStoreWithMiddleware= applyMiddleware(promiseMiddleware, ReduxThunk)(createStore);
root.render(
<Provider store={createStoreWithMiddleware(Reducer, window.__REDUX_DEVTOOLS_EXTENSION__
&& window.__REDUX_DEVTOOLS_EXTENSION__())}>
<App />
</Provider>
);