[英]State in React not changing with setState method
我试图在我的一个函数中使用setState
方法更新我的状态,但状态并没有以某种方式改变。 我还在该函数中使用if
语句来告诉 setState 何时实际更改状态。 当if
语句为true
但我的状态仍然没有改变时,我会在console.log
返回正确的消息。 什么可能导致错误?
我的功能和状态:
constructor(props) {
super(props);
this.state = {
isregistered: false
}
}
handleValidate = (validate) => {
const state1 = this.state
console.log('state1', state1)
const validate1 = validate
console.log('l]plik validate', validate1)
if ( validate.length != 0){
this.setState({
isregistered: true
})
console.log('onregatud', this.state.isregistered)
}
else{
console.log('mitteregatud', this.state.isregistered)
}
}
这不是错误,setState 是异步的。 如果要在 setState 之后立即检查状态,则需要传递回调:
this.setState({myState : newState}, () => console.log(this.state.myState))
setState()
操作是异步的,并且您的console.log()
将在setState()
改变isregistered
的值之前执行,您将其从false
设置为true
,因此您无法看到结果。
我们可以通过两种方式解决这个问题:
通过将回调函数传递给setState()
const handleValidate = (validate) => { const state1 = this.state const validate1 = validate if ( validate.length != 0){ this.setState( { isregistered: true }, () => console.log('callback fired', this.state)); } else { console.log('mitteregatud', this.state.isregistered); } }
通过使用async-await
async function handleValidate(validate) { const state1 = this.state const validate1 = validate if ( validate.length != 0){ await this.setState({ isregistered: true}) // More code here based on state outside callback console.log('onregatud', this.state.isregistered) } else { console.log('mitteregatud', this.state.isregistered) } }
使用async-await
在setState()
中使用回调更干净
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.