Redux 中的 store.dispatch 是同步的还是异步的

IT技术 javascript reactjs redux single-page-application
2021-03-13 19:19:56

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

store.dispatch同步的还是异步的Redux

如果它是异步的,是否有可能在传播动作后添加回调,因为它可能与React?

2个回答

AFAIK,调度动作是同步的。如果您愿意处理异步调用,您可以使用redux 中thunk-middleware,其中 dispatch 作为回调函数提供,您可以根据自己的方便调用。有关更多信息,请查看作者自己在 SO 上的答案:How to dispatch a Redux action with a timeout?

我不确定您面临的挑战,但使用thunkaction的总体思路是促进代码的异步流。例如,一旦Promise完成,用户就可以分派动作。
2021-04-20 19:19:56
但是很多人建议我:不要在异步流程中调用 dispatch,这会使 redux 状态变得不可预测,您应该同步调用 dispatch。但是 thunk-middleware 只是在 await 之后调用 dispatch,这是异步流程。哪个观点是正确的?对不起,我的英语不好 :)
2021-05-09 19:19:56

没有人比代码本身更了解=) 如您所见,dispatch是绝对同步的。这里唯一的警告是 storeenhancers可以(并且确实)替代dispatch方法。例如,看看applyMiddleware增强,它可以让你在更换默认插孔中间件dispatch与它自己的实现方法。虽然我从未见过任何 Reduxenhancer实际上会删除dispatch.

您应该将应用中间件链接更新为https://github.com/reduxjs/redux/blob/master/src/applyMiddleware.ts#L19(由于从 js -> ts 的 redux 迁移,我无法进行编辑因为它 <6 个字符)。或者,也许您应该在他们仍然像在您的code itself链接中一样使用 js 时引用提交,这会由于提交的“永久链接”方面而导致死链。
2021-05-03 19:19:56