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

父函数包含此行

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


这条线工作并以每次增量更新状态。

但在此之前

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


跳过了几个增量并中断了程序。

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

最佳答案

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

关于javascript - React的setState何时更改状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44492678/

10-12 15:37