在Redux中,store.dispatch是同步还是异步的?

6 浏览
0 Comments

在Redux中,store.dispatch是同步还是异步的?

我意识到这是一个基础问题,但是在其他地方我没有找到答案。

在Redux中,store.dispatch是同步还是异步的?

如果它是异步的,是否有可能在操作传播后添加回调函数,就像在React中那样?

0
0 Comments

问题:Redux中的store.dispatch是同步还是异步的?

在Redux源代码中的这段代码中,可以明确看到dispatch是完全同步的。这里的唯一警告是,store的增强器(enhancers)可以(而且确实)替换dispatch方法。例如,可以看一下applyMiddleware增强器,它允许通过替换默认的dispatch方法来引入中间件。尽管我从未见过任何Redux增强器实际上会取消dispatch的同步性。

解决方法:

更新applyMiddleware的链接为https://github.com/reduxjs/redux/blob/master/src/applyMiddleware.ts#L19(由于Redux从js迁移到ts,我无法进行小于6个字符的编辑)。或者,你可以引用一个仍然使用js的提交记录,就像在你的代码本身链接中一样,但由于提交记录的“永久链接”属性,可能会导致链接失效。

0
0 Comments

在Redux中,store.dispatch是同步的。但是如果想要处理异步调用,可以使用Redux中的thunk中间件。thunk中间件会将dispatch作为一个回调函数提供,可以根据需要调用它。具体使用方法可以参考这个stackoverflow上作者本人的回答:How to dispatch a Redux action with a timeout?

但是很多人建议不要在异步流程中调用dispatch,因为这样会使Redux的状态变得不可预测,应该同步调用dispatch。但是thunk中间件会在await之后调用dispatch,这是一个异步流程。那么哪种意见是正确的呢?

我不确定你所面临的挑战是什么,但是使用thunk action的整体思想是为了方便代码的异步流程。例如,用户可以在promise实现后调度action。

所以,根据上述内容可以得出结论,store.dispatch在Redux中是同步的。如果需要处理异步调用,可以使用thunk中间件。但是一些人建议不要在异步流程中调用dispatch,而是同步调用dispatch。

0