2017-06-29 6 views
2

IDは毎分新しいAPI呼び出しを作成することで、最新の状態を維持するビューを作成するのが好きです。基本的には、すべての子コンポーネントをトリガーして再レンダリングし、API呼び出しを再度行う必要があります。 IveはforceUpdate()を使って試してみました。また、prop(下記)を更新しました。タイマーが働いているが、子コンポーネントは、より多くのデータ子コンポーネントを強制的に再登録する(API呼び出しを行う)

のためのAPIを呼び出していない現在、コンポーネントは次のようになります。私は、ここに期待していた

class Api extends React.Component { 

    componentDidMount() { 
    this._makeApiCall(this.props.endpoint); 
    } 
... 

class MyComponent extends React.Component<Props, State> { 

    state = { 
    time: 0 
    }; 

    private interval : any; 

    componentDidMount() { 
    this.interval = setInterval(this._refreshPage.bind(this), 1000); 
    } 
    componentWillUnmount() { 
    clearInterval(this.interval); 
    } 

    _refreshPage() { 
    console.log("refresh"); 
    //this.forceUpdate(); 
    this.setState({ time: Date.now() }); 
    } 

    render() { 
    return (
     <div className="MyComponent"> 

      <Api endpoint={'/api/revenue/total_revenue?' + this.state.time} loadData={true}> 
      <Table /> 
      </Api> 
... 

アピnuwタイムスタンプ(それがしている)で変更されたプロキシクエリパラメータとして、Apiコンポーネントは再レンダリングして「新しい」エンドポイントを呼び出します。小道具は変更されますが、APIは再び呼び出されません。なぜですか?

答えて

1

lifecycle methodを使用してください。 componentDidMountは、コンポーネントがdomに初めて追加されたときにのみ呼び出され、以降の再レンダリングでは呼び出されません。 shouldComponentUpdateはおそらくあなたが望むものです。

+0

これにはどのライフサイクルが適していますか? –

+0

ちょうど編集されました。 shouldComponentUpdateはおそらくあなたが望むものですが、componentWillReceivePropsも同様に動作します。一度だけ呼び出されるので、componentDidMountではありません。 – gvfordo

+0

少し詳しく説明したり、例を挙げたりできますか? '_makeApiCall'を' shouldComponentUpdate'に移動しても正しく動作しないようです。 –

関連する問題