Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.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 为什么在找到匹配项时未更新我的状态?_Javascript_Reactjs_State - Fatal编程技术网

Javascript 为什么在找到匹配项时未更新我的状态?

Javascript 为什么在找到匹配项时未更新我的状态?,javascript,reactjs,state,Javascript,Reactjs,State,我有一个带有几个状态值的react组件。其中一个值是compareKey。我有一个handleChange()函数,如果找到匹配项,该函数将更新此状态。由于某种原因,我无法理解,compareKey的状态没有更新 两个console.log都应打印出“限制”,但只有temp值打印出“限制”。我的状态没有更新的原因是什么 输入代码: <input type="text" name="keyToFind" placeholder="search here" value={this.state.

我有一个带有几个状态值的react组件。其中一个值是compareKey。我有一个handleChange()函数,如果找到匹配项,该函数将更新此状态。由于某种原因,我无法理解,compareKey的状态没有更新

两个console.log都应打印出“限制”,但只有temp值打印出“限制”。我的状态没有更新的原因是什么

输入代码:

<input type="text" name="keyToFind" placeholder="search here" value={this.state.keyToFind} onChange={this.handleChange.bind(this)} />
{renderOutFile}
控制台打印

match found
Temp: Limits
Compare Key: 
我也希望比较键来打印“限制”,但它是空白的。不确定为什么我的状态没有被更新……

setState()
是异步的,在调用状态时不会更新状态。相反,它将稍后发生的状态更改排入队列<代码>设置状态()调用可以批处理在一起以提高效率

将setState()视为请求,而不是对 更新组件。为了获得更好的感知性能,可能会做出反应 延迟它,然后在一次过程中更新几个组件。反应 不保证立即应用状态更改

无法强制React立即更新状态。相反,您可以给
setState()
一个回调函数,该函数将在状态更新后立即执行

this.setState({
  compareKey: temp
}, () => {
  // This function will run after state.compareKey has been set to temp
});

setState
是异步的,但是当此更改应用于状态(第二个参数将是回调)时,您可以得到done回调,您使用的是什么状态管理,组件状态?另外,您真正想要实现的是什么,因为这看起来更像是XY problemcomponent状态-所以添加第二个参数?正如@Icepickle提到的,您应该这样做
this.setState({compareKey:temp},()=>{console.log(“Compare Key:+this.state.compareKey)})
是的,但是请注意,我不认为您需要它,它只会在控制台中打印
compareKey
(您也可以打印
temp
),我猜代码后面的
compareKey
还有一个问题,这些只是调试语句,虽然回答了这个问题,但我真的认为这与OP的真正问题无关,我只是认为我们遗漏了他难题的一部分;)
this.setState({
  compareKey: temp
}, () => {
  // This function will run after state.compareKey has been set to temp
});