Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.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 React中的状态不随setState方法更改_Javascript_Reactjs_Function_Setstate_React State - Fatal编程技术网

Javascript React中的状态不随setState方法更改

Javascript React中的状态不随setState方法更改,javascript,reactjs,function,setstate,react-state,Javascript,Reactjs,Function,Setstate,React State,我试图在我的一个函数中用setState方法更新我的状态,但状态并没有改变。我还在该函数中使用if语句来告诉setState何时实际更改状态。如果语句为true但我的状态仍然没有改变,我会在控制台中返回正确的消息。什么会导致错误 我的职能和状态: constructor(props) { super(props); this.state = { isregistered: false } } handleValidate = (validate) =&g

我试图在我的一个函数中用
setState
方法更新我的状态,但状态并没有改变。我还在该函数中使用
if
语句来告诉setState何时实际更改状态。如果
语句为
true
但我的状态仍然没有改变,我会在
控制台中返回正确的消息。什么会导致错误

我的职能和状态:

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是异步的。如果要在setState之后立即检查状态,则需要传递回调:

this.setState({myState : newState}, () => console.log(this.state.myState))
setState()
操作是异步的,在
setState()
isregistered
的值从
false
设置为
true
之前,将执行
console.log()

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

  • 通过将回调函数传递给
    setState()

  • 使用
    async wait

    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)
       }
    }
    
    setState()

  • setState()
    操作是异步的,在
    setState()
    isregistered
    的值从
    false
    设置为
    true
    之前,将执行
    console.log()

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

  • 通过将回调函数传递给
    setState()

  • 使用
    async wait

    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)
       }
    }
    
    setState()


  • 请显示
    render
    此功能未连接到我的UI按钮或任何东西。句柄验证最终在方法componentDidMount下调用,并在用户进入该页面时启动。这是否回答了您的问题?请显示
    render
    此功能未连接到我的UI按钮或任何东西。句柄验证最终在方法componentDidMount下调用,并在用户进入该页面时启动。这是否回答了您的问题?