繁体   English   中英

React 中的状态不会随着 setState 方法而改变

[英]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 ,因此您无法看到结果。

我们可以通过两种方式解决这个问题:

  1. 通过将回调函数传递给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); } }
  2. 通过使用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-awaitsetState()中使用回调更干净

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM