如何在更新Redux中的状态后触发关闭回调?
在React中,状态不会立即更新,所以我们可以在setState(state, callback)
中使用回调。但是如何在Redux中做到这一点?如何在更新Redux中的状态后触发关闭回调?
在调用this.props.dispatch(updateState(key, value))
后,我需要立即用更新的状态做些事情。
有没有什么办法可以像我在React中做的那样用最新状态调用回调?
您可以使用subscribe
侦听器,并在调度操作时调用它。在听众的内部,您将获得最新的商店数据。
组件进行更新,以便获得新道具。
有很多方法可以实现你的目标:LIVE DEMO for examples
1 componentWillReceiveProps/componentDidUpdate检查,如果值发生改变,就必须采取一些..
componentWillReceiveProps(nextProps){
if(nextProps.value!==this.props.value){alert(nextProps.value)}
}
2终极版,承诺 (中间件会发出承诺的解析值)
export const updateState = (key, value)=>
Promise.resolve({
type:'UPDATE_STATE',
key, value
})
然后在组分
this.props.dispatch(updateState(key, value)).then(()=>{
alert(this.props.value)
})
2.终极版-咚
export const updateState = (key, value)=> dispatch=>{
dispatch({
type:'UPDATE_STATE',
key, value
})
return Promise.resolve()
}
然后在组分
this.props.dispatch(updateState(key, value)).then(()=>{
alert(this.props.value)
})
在你的'redux-thunk'例子中,你使用'dispatch'就好像它是同步的。是这样吗? –
约阵营最重要的一点是一个单向数据流。在你的例子中,这意味着,分派一个动作和状态变更处理应该是分开的。
你不应该这样想:“我做了A
,现在X
成为Y
我处理它”,而是“我该怎么办时,X
成为Y
”,没有任何关系A
。商店状态可以从多个来源更新,除了您的组件外,时间旅行也可以更改状态,并且不会通过您的A
调度点。
基本上这意味着你应该使用componentWillReceiveProps
因为它提出@Utro
这就是答案OP真正需要的(虽然它看起来他没有意识到这一点。) –
你使用'thunk'? –
我觉得'dispatch()'是一个同步活动。更新后的状态应该在下一行中提供。 –
@PraneshRavi我这么认为。但我得到了旧的状态。我没有使用'thunk'。 –