如果我有这样的代码,
dispatch({
type: actionTypes.ABCD,
...newInfo,
});
const state = getState();
我可以100%依赖state
作为最新状态吗?或dispatch
是否异步,我无法保证状态是否已更新?
答案 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
});
这不会像预期的那样工作,因为上面定义的状态将具有旧状态,因为第一次调度已创建了一个新的不可变状态,该状态未由“状态”变量引用。