【问题标题】:Will react setState immedietly set the state?react setState 会立即设置状态吗?
【发布时间】:2017-03-30 04:37:54
【问题描述】:

我正在尝试使用 setState 存储一个值,但是我正在设置状态,并且在下一行我尝试对其进行控制台记录,但我无法在控制台中看到该值。

getInitialState: function(){
    return{
        myCountry: ""
      }
  }


var country = event.target.value;
this.setState({"myCountry": country});
console.log(this.state.myCountry); //prints nothing
console.log(event.target.value); 

当我浏览这个时,我看到 setState 是异步的,但我无法理解。

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    在调用 setState() 之后,你不会得到 state 的更新值。这是因为一旦调用 setState() 就会重新渲染视图。所以最好在 render 里面检查更新的值或者给 setState 添加回调函数。
    示例:

    this.setState({"myCountry": country},function(){console.log(this.state.myCountry)});
    

    或者,

    render: function() {
        console.log(this.state.myCountry)
    }
    

    【讨论】:

    • 这仅取决于组件生命周期的哪个部分当前处于活动状态。看我的回答。
    【解决方案2】:

    没有

    setState() 不会立即改变 this.state 而是创建一个 等待状态转换。调用 this 后访问 this.state 方法可能会返回现有值。

    如果你想检查更新的状态,你可以尝试在 render 方法中记录它,因为一旦状态改变,react 无论如何都会重新渲染。

    【讨论】:

    • 如果在事件处理程序中调用setState(),这是不正确的。
    • @probablyup 你能详细说明一下吗?
    • 看我的回答
    【解决方案3】:

    答案是取决于何时调用。在事件处理程序中调用 setState() 时会立即执行。我相信在组件安装之前它也可能是同步的。

    基本上每隔一段时间就会异步调用一次。

    【讨论】:

    猜你喜欢
    • 2018-08-05
    • 1970-01-01
    • 2018-08-12
    • 2022-11-29
    • 2015-08-27
    相关资源
    最近更新 更多