2016-11-16 55 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

相關問題