调度调用后getState是否总是返回最新状态?

时间:2017-07-24 16:55:25

标签: redux redux-thunk

如果我有这样的代码,

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

我可以100%依赖state作为最新状态吗?或dispatch是否异步,我无法保证状态是否已更新?

2 个答案:

答案 0 :(得分:3)

是。对dispatch()的调用本身就是100%同步的。到dispatch()返回时,已经运行了根减速器,状态值已更新,并且已通知所有订户。是的,在getState()之后立即拨打dispatch()将返回最新值。

需要注意的是,任何中间件都可以拦截,延迟或修改已分派的操作。因此,最终答案取决于您安装的中间件及其配置方式。

答案 1 :(得分:1)

getState()确实会检索最新值,但是如果您不更改状态(例如,不应该使用Immer库进行更改),则必须将其设置为“状态”,但要小心动作创建者内部的变量。

例如:

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

这不会像预期的那样工作,因为上面定义的状态将具有旧状态,因为第一次调度已创建了一个新的不可变状态,该状态未由“状态”变量引用。