2017-01-02 84 views
0

在React中,当我调用setState时,它有一个回调来通知我已设置状态。但是,当我使用Redux时,我使用dispatch来更改状态,但是如何知道状态是否已更新。无法知道何时更新状态时使用调度

例如:

dispatch({type: 'setCount', {count: 1}}); 

dispatch({type: 'add', {addedCount: this.state.count + 1}}) 

第二行依赖于第一线,但我们都知道的setState不是同步操作,我怎么能在终极版处理这个问题?

+1

React组件仍然可以保持本地状态,这看起来就像是你想要在这种情况下做的事情。如果您的点击次数增加,您可以使用本地状态来保持这一点。不需要像这样简单的操作复杂化。 –

+0

你不行。这不是Redux问题。 Redux是同步的,除非您使用存储增强器等。但这非常有趣。即使我使用存储增强器来删除商店更新,我从来也不需要这些。你能否给我们详细介绍一下你为什么需要它。 –

回答

1

通过使用redux-thunk模块,您可以从调度的操作中返回Promise。在这些行动上派遣(......)将神奇地返回承诺,以便你可以......然后(......)对他们发出。另一方面,如果你的动作是同步的,一个setTimeout(...,0)就可以做到这一点。

虽然在你的例子中,我认为第二次调度应该是一个简单的setState,只要没有任何外部依赖它,在这种情况下,它不应该是本地状态,而是一个组合动作,同一时间。 redux-thunk也有帮助。

+0

我可以从我的动作函数中返回一个承诺,但我怎么知道状态已经更新,以便我可以解决承诺?在React中,setState有一个回调来告诉用户状态已经改变。 setTimeout确实有效,但我认为这不是官方的方式。 – jasonjifly

+0

重点是将其减少到同步操作,您可以设置Timeout 0为“等待”。你通过在Promises中包装异步的东西来做到这一点。 setTimeout 0不是黑客。这是一种告诉解释器稍后在执行堆栈中执行一些操作的方式,而不是其他任何操作。 –

+0

是的,同意,但我仍然认为这不是一个好方法。无论如何,谢谢你的回答 – jasonjifly

0

如果您正在使用mapStateToProps将一个变量从redux存储区传递给您的组件,您可以在组件的render方法内执行console.log(this.props.variableName)。只要该变量在商店中更新,render方法就会被调用。