2017-03-29 4 views
1

ボタンがあります。しかしReact - 非同期処理の直後の状態を設定する

onSubmit(e) { 
     e.preventDefault(); 
     this.props.nextSentence(); //this is async 

     this.setState({ //this is not yet updating with the right values then 
      inputField: this.props.activePupil.name 
     }); 
    } 

:あなたがそのボタンをクリックすると、それはこのようになりますonSubmit検証機能が表示されますthis.props.nextSentence();は非同期であるので、私はすぐ後に私の状態を設定する場合、変更はありません。今すぐ状態を再設定する2番目の関数を参照する2番目のボタンがあります。私はこれが自動的に起こるようにしたいと思います。どうすればこのことができますか?

+0

? (...))) '' ' – lustoykov

+0

おそらく、あなたの状態を小道具として設定しようとすることができます。コールバックnextSentenceを含む親でそれを変更しますか? – Kornflexx

+0

このシナリオを処理する約束を使用することができます –

答えて

2

非同期アクションは通常、Promisesまたはfunctions with callbacksです。あなたは

this.props.nextSentence().then(() => { 
    this.setState({...}); 
}) 

そしてfunction with callback

this.props.nextSentence(() => { 
    this.setState({...}) 
}) 

の場合は、以下のように.thenを使用する必要がPromiseの場合

しかし、あなたの非同期の返された応答を得ることができるよりも心に留めておきますあなたの状態を更新するためにそれを使用します。これは通常の場合です。あなたは結果をしたいと、その後の状態を設定していない理由は例えば

//here response is a json object returned from server  
this.props.nextSentence().then((response) => { 
    this.setState({ 
    data: response.data 
    }); 
}) 
+0

ありがとうございます。 'しかし、あなたの非同期アクションの返された応答を取得し、それを使って状態を更新することができます。これは通常の場合です。 " - これは、約束やコールバックの使用とどのように違うのでしょうか? –

+0

私が提供した例のように、あなたの非同期メソッド応答を使って状態を変更するのとまったく同じです。 –

関連する問題