Javascript 为什么在找到匹配项时未更新我的状态?
我有一个带有几个状态值的react组件。其中一个值是compareKey。我有一个handleChange()函数,如果找到匹配项,该函数将更新此状态。由于某种原因,我无法理解,compareKey的状态没有更新 两个console.log都应打印出“限制”,但只有temp值打印出“限制”。我的状态没有更新的原因是什么 输入代码: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.
<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
});