React的setState何时更改状态

时间:2017-06-12 06:28:26

标签: javascript reactjs

我在子组件中有一个函数open(),它通过open()调用父函数props,并且它可以连续多次。

父函数包含此行

this.setState({numOpen: (++this.state.numOpen)});

此行在每个增量处都有效并更新状态。

但之前,这一行

this.setState({numOpen: (this.state.numOpen + 1)});

跳过几个增量并打破了程序。

是否异步调用setState?如果不是,那可能是什么原因呢?

1 个答案:

答案 0 :(得分:3)

正如@MayankShukla的重复回答所示,setState is asynchronous

然而,添加解释和更正的方法

在下面的案例中:

this.setState({numOpen: (++this.state.numOpen)});

您正在直接改变状态,然后设置值,因此它可以正常工作,但不是正确的方法

在第二种情况下

this.setState({numOpen: (this.state.numOpen + 1)});

setState正在将值添加到当前状态,因为它会因为异步性而导致意外行为。

正确的方法是使用prevState回调方法

 this.setState((prevState) => ({numOpen: (prevState.numOpen + 1)});