React 的 setState 什么时候改变状态

IT技术 javascript reactjs
2021-04-03 07:10:38

我有一个函数open()中调用父类的功能的子组件open()通过props,故能成一排是多次。

父函数包含这一行

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

此行在每个增量处工作并更新状态。

但在此之前,这条线

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

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

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

1个回答

正如@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)});