在React中,状态不会立即更新,因此我们可以在中使用回调setState(state, callback)
。但是在Redux中如何做呢?
调用之后this.props.dispatch(updateState(key, value))
,我需要立即对更新后的状态进行处理。
有什么方法可以像我在React中那样以最新状态调用回调?
在React中,状态不会立即更新,因此我们可以在中使用回调setState(state, callback)
。但是在Redux中如何做呢?
调用之后this.props.dispatch(updateState(key, value))
,我需要立即对更新后的状态进行处理。
有什么方法可以像我在React中那样以最新状态调用回调?
您可以在回调中使用thunk
myThunk = cb => dispatch =>
myAsyncOp(...)
.then(res => dispatch(res))
.then(() => cb()) // Do whatever you want here.
.catch(err => handleError(err))
作为一个简单的解决方案,您可以使用: redux-promise
但是,如果您使用redux-thunk,则应该这样做:
function addCost(data) {
return dispatch => {
var promise1 = new Promise(function(resolve, reject) {
dispatch(something);
});
return promise1;
}
}
您可以使用subscribe
侦听器,并且在分派操作时将调用它。在侦听器内部,您将获取最新的商店数据。
关于React的最重要的一点是单向数据流。在您的示例中,这意味着调度动作和状态更改处理应该分开。
您不应该像“我做了
A
,现在X
就成为了,现在就去Y
处理”那样思考,而是“当X
成为时我该做什么Y
”,而与无关A
。商店状态可以从多个来源进行更新,除了您的组件外,Time Travel还可以更改状态,并且不会通过您的A
调度点传递。基本上,这意味着您应该使用
componentWillReceiveProps
@Utro提出的建议