redux thunk
15847 ワード
コメントドキュメント
リッドが非同期タスクを処理する際に使用するミドルウェア のアクションオブジェクトではなくdispatch関数を使用できます. dispatch 関数の場合、この関数はdispatchとgetStateをパラメータとして受け入れます.この関数を作成する関数はthunk です.上のコードでは、thunkはインクリメントsync、インクリメントsync関数 である.の2つのthunk関数は、dispatchとgetStateをパラメータとする関数を返します. redux-thunkを使用するには、ミドルウェアをショップに適用する必要があります. 以上のコードCounterContainer.jsでは、 勉強してから書く...
紹介する
// thunk 함수
export const increaseAsync = () => (dispatch, getState) => {
setTimeout(() => dispatch(increase()), 1000)
}
export const decreaseAsync = () => (dispatch, getState) => {
setTimeout(() => dispatch(decrease()), 1000)
}
設定
npm install redux-thunk
適用
//index.js
다른건 생략...
import ReduxThunk from 'redux-thunk';
import { createStore, applyMiddleware } from 'redux';
import { composeWithDevTools } from 'redux-devtools-extension';
const store = createStore(
rootReducers,
composeWithDevTools(applyMiddleware(ReduxThunk, logger))
)
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);
//counter.js
// 액션 타입
const INCREASE = 'INCREASE';
const DECREASE = 'DECREASE';
// 액션 생성 함수
export const increase = () => ({ type: INCREASE });
export const decrease = () => ({ type: DECREASE });
// getState를 쓰지 않는다면 굳이 파라미터로 받아올 필요 없습니다.
export const increaseAsync = () => dispatch => {
setTimeout(() => dispatch(increase()), 1000);
};
export const decreaseAsync = () => dispatch => {
setTimeout(() => dispatch(decrease()), 1000);
};
// 초깃값 (상태가 객체가 아니라 그냥 숫자여도 상관 없습니다.)
const initialState = 0;
export default function counter(state = initialState, action) {
switch (action.type) {
case INCREASE:
return state + 1;
case DECREASE:
return state - 1;
default:
return state;
}
}
//CounterContainer.js
import React from 'react';
import Counter from '../components/Counter';
import { useSelector, useDispatch } from 'react-redux';
import { increaseAsync, decreaseAsync } from '../modules/counter';
function CounterContainer() {
const number = useSelector(state => state.counter);
const dispatch = useDispatch();
const onIncrease = () => {
dispatch(increaseAsync());
};
const onDecrease = () => {
dispatch(decreaseAsync());
};
return (
<Counter number={number} onIncrease={onIncrease} onDecrease={onDecrease} />
);
}
export default CounterContainer;
increaseAsync()
を呼び出すと関数が返されます.返される関数は、非同期呼び出しが完了した後にdispatch(increase())
を呼び出す.Reference
この問題について(redux thunk), 我々は、より多くの情報をここで見つけました https://velog.io/@jing07161/redux-thunkテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol