2016-11-16 8 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()を呼び出した直後に更新されたstateの値は取得されません。これは、setState()が呼び出されるとすぐに、ビューが再レンダリングされるためです。だから、レンダリング内の更新された値をチェックするか、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()は、イベントハンドラ内で呼び出されるとすぐに実行されます。私はそれがコンポーネントがマウントされる前に同期するかもしれないと信じています。

基本的に1回限り非同期に呼び出されます。

+0

クレームの参考資料を表示することはできますか – StateLess

+0

こちらをご覧ください。https://stackoverflow.com/questions/36085726/setstate-in-reactjs-is-async-or-sync – StateLess

関連する問題