Reactjs 按特定顺序重新执行分派操作
之前我问了一个问题,关于如何在采取行动之前强制完成调度,但是我并没有真正解决我的问题 似乎将派遣包装在承诺中没有任何作用,因为一旦派遣完成,承诺将得到解决,而不一定如其中一条评论中所述减少 这是我的密码:Reactjs 按特定顺序重新执行分派操作,reactjs,redux,Reactjs,Redux,之前我问了一个问题,关于如何在采取行动之前强制完成调度,但是我并没有真正解决我的问题 似乎将派遣包装在承诺中没有任何作用,因为一旦派遣完成,承诺将得到解决,而不一定如其中一条评论中所述减少 这是我的密码: export const selectObjectTransition = (transition) => { return dispatch => { dispatch({ type: IS_DONE, isDone: false
export const selectObjectTransition = (transition) => {
return dispatch => {
dispatch({
type: IS_DONE,
isDone: false
})
dispatch(loadObjectTransitionApprovals(transition.id));
dispatch(loadObjectTransitionHooks(transition.id));
dispatch({
type: SELECT_TRANSITION,
selected_transition: transition,
});
dispatch({
type: IS_DONE,
isDone: true
})
}
}
基本上,我希望实现的是按照以下顺序执行和完成调度(从顶部到bottm)。现在,它偶尔会中断并以不同的顺序完成调度,导致我的前端出现错误
我的redux开发工具:
IS_DONE -> SELECT_TRANSITION -> IS_DONE -> ......
第二个
已经完成了
操作应该在最后一个执行,除了我上面的评论,你也可以试试这个
export const toDispatch = () =>{
return dispatch =>{
axios.get(url).then(()=>{
dispatch(functionToDispatch())
})
}
}
看看它将帮助您编写一个生成器函数,它将帮助您使这些异步流易于读取、写入和测试
以下是一个例子:
函数*fetchUser(操作){
试一试{
//您可以在此处调用您想要分派的操作
产生put({type:“USER\u FETCH\u successed”,USER:USER});
}捕获(e){
产生put({type:“USER\u FETCH\u FAILED”,message:e.message});
}
}
函数*mySaga(){
收益takeEvery(“用户\获取\请求”,获取用户);
}
尝试将它们放在Try-catch块中,并对每个分派调用以异步方式调用操作分派-通常看起来如下:
export const actionName = ({VariablesToPassToTheAction}) => async(dispatch) => {
};
尝试为所有涉及api调用的操作调整此机制。最后把你的东西包在试抓块里。如果发生错误,后续调度将失败并调用catch块,否则将按顺序执行:
export const selectObjectTransition = (transition) => async(dispatch) => {
try{
dispatch({
type: IS_DONE,
isDone: false
})
dispatch(loadObjectTransitionApprovals(transition.id));
dispatch(loadObjectTransitionHooks(transition.id));
dispatch({
type: SELECT_TRANSITION,
selected_transition: transition,
});
dispatch({
type: IS_DONE,
isDone: true
})
}
catch(err){
//control shifts here if any dispatch fails. Don't forget to handle the error
}
}
不要同时调用actionsall,希望它们都能立即被调度,而是使用
componentDidUpdate(prevProps)
检查操作是否已调度,reducer是否已更新,然后发送第二个操作,然后执行同样的操作,然后发送第三个操作。有更好的方法吗?因为有时我希望收到一个null或空结果,所以检查我是否收到数据是不可靠的,而是检查操作本身是否完成不是我能想到的,我会在我的reducer中创建另一个字段,如dataFecthing
,每次调用操作时都调用它,在开始时dataFetching:true
和收到响应后false
,它应该可以解决您在componentdiddupdate
中遇到的问题,因为它会被调用并随时更新道具。