2017-10-30 8 views
1

コンポーネントがマウントされると(サーバー側のレンダリング後に水分補給されるときを含む)ComponentDidMount()がトリガーされます。サーバー側から既に利用可能な場合、componentDidMountがデータを取得しないようにする

私がオンラインで見つけた解決策の1つは、状態にデータがあるかどうかを確認することです。しかし、これはすべてのコンポーネントに多くのコードを含める必要があります。他の解決策は何ですか?

componentDidMount() { 
    // if rendered initially, we already have data from the server 
    // but when navigated to in the client, we need to fetch 
    if (!this.state.data) { 
     this.constructor.fetchData(this.props.match).then(data => { 
     this.setState({ data }) 
     }) 
    } 
    } 
+0

私は別の解決策はないと思います。代わりに、あなたはredux-sagaとそのセレクタをチェックすることができます –

答えて

1

私は代わりの解決法を見つけました。 Reduxストアでは、現在のページのURLを保持します。したがって、ナビゲーションでは、私は以下を行うことができます:

componentDidMount() { 
    const { url, match } = this.props; 
    if (url !== match.url) { 
    fetchData(match.path); 
    } 
} 
+0

データがすでに利用可能であってもこれはapi呼び出しを行いませんか? –

+0

これは、上記の条件が偽であるため、サーバからの呼び出し(コードは含まれていません)を行い、最初のロードでは行いません。別のページにナビゲートすると、上記の条件が成立し、データが取得されます。 –

+0

デモプロジェクト(WIP):https://github.com/IncredibleWeb/React-PWA-Boilerplate –

関連する問題