2016-11-16 59 views
0

我想存储一个值使用setState,但是我设置状态,并在下一行我想要console.log它,我无法看到控制台中的值。会立即反应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是异步的,但我无法理解。

回答

2

在调用setState()之后,您将不会获得状态的更新值。这是因为一旦setState()被调用,view就会被重新渲染。因此,最好检查render中的更新值或将回调函数添加到setState。
例子:

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

或者,

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

根据组件生命周期的哪个部分当前处于活动状态,这只是正确的。看到我的答案。 – probablyup

1

NO

的setState()不立即发生变异this.state但创建 未决状态转变。调用 方法后访问this.state可能会返回现有值。

如果你想检查更新的状态,你可以尝试在渲染方法中记录它,因为一旦状态改变,反应将以任何方式重新呈现。

+0

如果在事件处理程序中调用了setState(),这是不正确的。 – probablyup

+0

@probablyup可以详细说明吗? – StateLess

+0

看看我的回答 – probablyup

0

答案是这取决于当它被称为上。 setState()在事件处理程序中被调用时立即执行。我相信它在组件装入之前也可能是同步的。

基本上每隔一段时间它将被异步调用。

+0

你能告诉我一些索赔 – StateLess

+0

参考这个https://stackoverflow.com/questions/36085726/setstate-in-reactjs-is-async-or-sync – StateLess

相关问题