在反应中无法立即设置状态后获得新值

nir*_*tra 2 reactjs

我正在使用 Reactjs。如果未正确输入,我将在其中设置错误。
示例代码是:

handleChange: function() {
 if(shares) {
   this.setState({
     error_shares:''
   })
 } 
 if(this.state.error_shares === ''){
  console.log('entered!!')
 }
}
Run Code Online (Sandbox Code Playgroud)

这里的值error_state不反映下一个更改的值,如果

act*_*eek 6

是的,这是所需的行为。

值没有更新的原因是因为你的组件还没有被重新渲染。

如果您需要这样的功能,您应该使用 componentDidUpdate回调。

此处查看生命周期方法

解释

下面是 React 的工作原理:

  1. 每个组件都是external props+的函数internal state

  2. 如果触发了两者之一的更改,则组件将排队等待重新渲染(它是异步的,因此不会阻止客户端应用程序)。

  3. 有关确切的操作顺序,请参阅上面的链接,但这里有一些概念证明。

    import React from 'react';
    
    class Example extends React.Component {
    
        constructor(props, context) {
            super(props, context);
            // initial state
            this.state = {
                clicked: false
            };
        }
    
        componentDidUpdate(prevProps, prevState) {
            console.log(this.state.clicked);   // this will show "true"
        }
    
        render() {
            return (
                <button 
                    onClick={() => {
                        this.setState({clicked: true}); 
                    }}
                >
                </button>
            );
        }
     }
    
    Run Code Online (Sandbox Code Playgroud)