我在子组件中有一个函数open()
,它通过open()
调用父函数props
,并且它可以连续多次。
父函数包含此行
this.setState({numOpen: (++this.state.numOpen)});
此行在每个增量处都有效并更新状态。
但之前,这一行
this.setState({numOpen: (this.state.numOpen + 1)});
跳过几个增量并打破了程序。
是否异步调用setState?如果不是,那可能是什么原因呢?
答案 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)});