Javascript 什么时候反应';s设置状态更改状态
我在一个子组件中有一个函数Javascript 什么时候反应';s设置状态更改状态,javascript,reactjs,Javascript,Reactjs,我在一个子组件中有一个函数open(),它通过props调用父函数open(),它可以连续多次调用 父函数包含这一行 this.setState({numOpen: (++this.state.numOpen)}); 该行工作并在每次增量时更新状态 但在此之前,这条线 this.setState({numOpen: (this.state.numOpen + 1)}); 跳过了几个增量,正在中断程序 是否异步调用setState?如果不是,原因可能是什么?正如@MayankShukla的重复
open()
,它通过props
调用父函数open()
,它可以连续多次调用
父函数包含这一行
this.setState({numOpen: (++this.state.numOpen)});
该行工作并在每次增量时更新状态
但在此之前,这条线
this.setState({numOpen: (this.state.numOpen + 1)});
跳过了几个增量,正在中断程序
是否异步调用setState?如果不是,原因可能是什么?正如@MayankShukla的重复答案所示,
设置状态是异步的
然而,增加了一个解释和一个正确的方法
在以下情况下:
this.setState({numOpen: (++this.state.numOpen)});
您直接改变状态,然后设置值,因此它可以工作,但这不是正确的方法
在第二种情况下
this.setState({numOpen: (this.state.numOpen + 1)});
setState
正在将值添加到当前状态,因为它的异步性质会导致意外行为
正确的方法是使用prevState
回调方法
this.setState((prevState) => ({numOpen: (prevState.numOpen + 1)});
正如@MayankShukla的重复回答所指出的,setState是异步的
然而,增加了一个解释和一个正确的方法
在以下情况下:
this.setState({numOpen: (++this.state.numOpen)});
您直接改变状态,然后设置值,因此它可以工作,但这不是正确的方法
在第二种情况下
this.setState({numOpen: (this.state.numOpen + 1)});
setState
正在将值添加到当前状态,因为它的异步性质会导致意外行为
正确的方法是使用prevState
回调方法
this.setState((prevState) => ({numOpen: (prevState.numOpen + 1)});
检查:这是一篇好文章谢谢@MayankShukla回答了我的问题可能是@VikramSaini的副本这是一篇好文章谢谢@MayankShukla回答了我的问题可能是@VikramSaini的副本这是一篇好文章,谢谢