Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么时候反应';s设置状态更改状态_Javascript_Reactjs - Fatal编程技术网

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的副本这是一篇好文章,谢谢