我有一个函数open()
中调用父类的功能的子组件open()
通过props
,故能成一排是多次。
父函数包含这一行
this.setState({numOpen: (++this.state.numOpen)});
此行在每个增量处工作并更新状态。
但在此之前,这条线
this.setState({numOpen: (this.state.numOpen + 1)});
跳过了几个增量并破坏了程序。
setState 是否被异步调用?如果不是,那可能是什么原因?
我有一个函数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)});