getState 总是 return 调度调用后的最新状态吗?

Will getState always return the latest state after a dispatch call?

如果我有这样的代码,

    dispatch({
        type: actionTypes.ABCD,
        ...newInfo,
    });
    const state = getState();

我可以 100% 相信 state 是最新状态吗?或者 dispatch 是异步的,我无法保证状态是否已更新?

是的。对 dispatch() 的调用本身是 100% 同步的。到 dispatch() returns 时,root reducer 已经 运行,状态值已经更新,所有订阅者都已收到通知。所以是的,在 dispatch() 之后立即调用 getState() 将 return 最新值。

需要注意的是,任何中间件都可以拦截、延迟或修改已分派的操作。所以,最终的答案取决于你安装了什么中间件以及它们是如何配置的。

getState() 确实会检索最新值,但是如果您没有改变状态(您不应该改变状态,例如使用 Immer 库),则将其设置为 'state' 动作创建器中的变量。

例如:

let state = getState();
dispatch({
    type: actionTypes.someStateChange,
    newInfo1: newInfo
});
dispatch({
    type: actionTypes.someOtherAction,
    infoDependentOnNewInfo1: state.newInfo1.property
});

这不会像预期的那样运行,因为上面定义的状态将具有旧状态,因为第一次分派创建了一个新的不可变状态,该状态未被 'state' 变量引用。