在thunk的开头,我发出了一个“开始”字样。行动,然后我等待一些异步的东西,最后派出一个成功的'成功'成功动作。
有时可能会发生这个thunk在前一个结束之前再次被调度(成功动作),所以我希望第二个START动作被拒绝,并且thunk停止继续执行async stuff和END动作。
所以我的方法是检查中间件是否已经调度了调度的操作(之前的操作与当前操作相同),但我无法弄清楚如何在&#中拒绝操作之后立即从thunk返回39,漂亮的'方式。
目前我从中间件返回false,需要从dispatch中检查返回的值。
export const doSomething = () => async (dispatch, getState) => {
if(!dispatch({type: 'START'})) return;
//...async stuff
dispatch({type: 'SUCCESS'});
}
有没有办法从一点(中间件)控制这个?
答案 0 :(得分:0)
我假设有一个reducer根据这些操作(START
,SUCCESS
,...)更改存储状态。
如果是这样,您必须在决定发送之前检查商店状态:
export const doSomething = () => async (dispatch, getState) => {
if (getState().isLoading) return ; // <-- ⚠️ ⚠️ ⚠️
if(!dispatch({type: 'START'})) return;
//...async stuff
dispatch({type: 'SUCCESS'});
}
假设减速器执行如下操作:
function (state = {}, action) {
if (action.type === 'START') {
return {...state , isLoading: true };
}
if (action.type === 'SUCCESS') {
return {...state , isLoading: false };
}
return state;
}