如何在更新Redux中的状态后触发关闭回调?

问题描述:

在React中,状态不会立即更新,所以我们可以在setState(state, callback)中使用回调。但是如何在Redux中做到这一点?如何在更新Redux中的状态后触发关闭回调?

在调用this.props.dispatch(updateState(key, value))后,我需要立即用更新的状态做些事情。

有没有什么办法可以像我在React中做的那样用最新状态调用回调?

+0

你使用'thunk'? –

+0

我觉得'dispatch()'是一个同步活动。更新后的状态应该在下一行中提供。 –

+1

@PraneshRavi我这么认为。但我得到了旧的状态。我没有使用'thunk'。 –

您可以使用subscribe侦听器,并在调度操作时调用它。在听众的内部,您将获得最新的商店数据。

http://redux.js.org/docs/api/Store.html#subscribelistener

+0

“订阅”仅在分派动作时触发。如果您的API调用已返回任何数据,“订阅”无法让您知道..我想! :D – Mihir

+0

当您的请求完成(成功或失败)时,您可以发送另一个操作。 – Jam

组件进行更新,以便获得新道具。

有很多方法可以实现你的目标: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) 
}) 
+0

在你的'redux-thunk'例子中,你使用'dispatch'就好像它是同步的。是这样吗? –

约阵营最重要的一点是一个单向数据流。在你的例子中,这意味着,分派一个动作和状态变更处理应该是分开的。

你不应该这样想:“我做了A,现在X成为Y我处理它”,而是“我该怎么办时,X成为Y”,没有任何关系A。商店状态可以从多个来源更新,除了您的组件外,时间旅行也可以更改状态,并且不会通过您的A调度点。

基本上这意味着你应该使用componentWillReceiveProps因为它提出@Utro

+0

这就是答案OP真正需要的(虽然它看起来他没有意识到这一点。) –