我在子组件中有一个函数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/