2016-10-26 10 views
0

クイックは、特にコンポーネントの質問に反応します。いくつかのパラメータが が反応 - 同じデータを2回レンダリングからライフサイクルのコンポーネントを防ぐ:WillReceiveProps&componentDidMount

これは素晴らしい作品を変更したときにデータを更新するために - コンポーネントが最初

  • componentWillReceiveProps(nextProps)にレンダリングされたときにデータを取り出す-for

    • componentDidMount():私は2つのライフサイクルメソッドを使用しています。しかし、コンポーネントでページを更新すると、両方のライフサイクルメソッドが実行されます。ページ上のデータはまだ正しいですが、少し非効率なようです。可能であればこれらをライフサイクルにどのように組み合わせることができますか?

      以下の例では、ページがリフレッシュされるときにをfetchTest()に2回呼び出します。私はcomponentDidMountを削除した場合、ユーザーがページをリフレッシュする場合、データは最初にロードされません。

      fetchtestを()が一度に関係なく、ユーザがコンポーネントに取得する方法と呼ばれていない方法上の任意のアイデア?

      componentDidMount() { 
          fetchTest(this.props.params.id); 
          // for initial component render 
          } 
      
          componentWillReceiveProps(nextProps) { 
          fetchTest(nextProps.params.id); 
          // for when (params.id) is changed. data within component is updated 
          } 
      
  • +0

    やりたいです。あなたは 'fetchTest'は一度だけ呼び出される保証したい場合は、全く' componentWillReceiveProps'が含まれていません..しかし、あなたはときに、新しい 'params'' fetchTest'を呼び出すの動作を維持したい場合は、 'this.propsを比較します。 paramsに 'next.props.params'を付けてIDが異なるかどうかを確認します – azium

    答えて

    2

    はおそらく、あなたの質問は奇妙な言葉で表現され

    componentWillReceiveProps(nextProps) { 
        if (nextProps.params.id !== this.props.params.id) { 
        fetchTest(nextProps.params.id); 
        } 
    } 
    
    関連する問題