我使用react,redux和redux-thunk middlewere。
我的代码如下:
function thunkFunction(){
return(dispatch) => {
dispatch(toggleSmth(false));
dispatch(toggle2Smth(false));
SomeService.getSmth()
.then(response => {
dispatch(oneMoreAction);
dispatch(one2MoreAction);
}
}
}
现在我在componenDidMount()之后在某个组件中调度整个thunk动作。
它的工作原理如下:
问题是:
为什么一旦调度等待整个堆栈清除。在Promise中,dispatch组件会自动重新发送,之后它会返回到下一个Promise函数元素吗?
另外当我把dispatch(toggleSmth(false))放在promise之内时:
function thunkFunction(){=
return(dispatch) => {
SomeService.getSmth()
.then(response => {
dispatch(toggleSmth(false));
dispatch(toggle2Smth(false));
dispatch(oneMoreAction);
dispatch(one2MoreAction);
}
}
}
dispatch(toggleSmth(false))
和dispatch(toggle2Smth(false))
自动reender组件。 (不要等待清除回调堆栈'}')。在reender接下来之后 - >到第一个dispatch(oneMoreAction);
为什么一旦调度导致自动reender并且一旦你必须等待函数内部元素的执行?
答案 0 :(得分:0)
我认为你对两件事有一点误解:
在最基本的层面上发生的事情是,你正在召唤一个总共调用4次的thunk动作(一个proimise)。每次调用修改状态的操作时,该状态触及的组件(通过mapStateToProps
)都将重新呈现。
当您将所有调度函数置于1个异步调用(即嵌套一次)(在这种情况下为SomeService.getSmth().then(() => {...});)
)时,它会导致它们相对于彼此同步触发...组件仍会重新呈现因为它被被修改的国家所触及。
在第一种情况下,相对于彼此同步调用2个调度,然后仅在服务调用完成后,服务调用与其他两个调度一起发生