2016-12-12 12 views
1

コンポーネントをマウントする前にAPIを呼び出していますが、コードでAPIを2回呼び出しています。私の要件は、成功したAPI呼び出しを取得した後、年データを表示することです(年データを返します)。私がcomponentWillMount内でsetState関数を使用すると、レンダリングメソッドを呼び出すべきではありませんが、私の場合はレンダリング関数が複数回呼び出されます。componentWillMountを2回実行する

componentWillMount(){ 
     // Year api call 
      var oauth=GetAuthToken() 
     if(this.props.options.apiName === 'year__c'){ 
      var access_token=oauth.then((data) => { 
      var temp 
      temp=GetYear(data.access_token) 
      temp.then((obj) => { 
       this.setState({ 
       year:obj 
       }) 
      }) 
      })  
     } 
    } 
+1

サイド・コメントと同じように、私は再描画をトリガーしないので、 'componentWillMount'関数で状態を設定するのは避けがちです。代わりに 'componentDidMount'関数を使用します。 – Fizz

答えて

2

問題は、あなたの設定状態が約束に基づいて解決されていることです。通常のcomponentWillMountでは、setStateは状態を更新し、render()が最初に呼び出されます。非同期APIコールをピクチャに導入すると、何が起こるのですか?

componentWillMountが実行され、API呼び出しが行われ、プロミスが作成され、プロミスが解決されるコードを待つ間、Reactがレンダリングを実行します)メソッドを呼び出します。レンダリング後、Promiseが解決されると、setStateが呼び出され、Componentはすでにレンダリングされているため、状態の変更により再レンダリングする必要があります。

2つの主な違い:がcomponentWillMountにある場合は、レンダリングが行われる前に発生します。解決策の一部としてsetStateがある場合、コンポーネントがレンダリングされた後に発生し、複数のレンダリングを引き起こします。

関連する問題