2017-10-06 12 views
2

私のアプリケーションでは、ユーザーには複数の..「犬」と言うことがあります。現在選択されている犬がヘッダーに表示され、ヘッダーのドロップダウンメニューから変更できます。新しい犬を選択すると、それはバックエンドにprimary: trueとしてマークされ、対応するヘッダーUIを更新します。その時点から、バックエンドへのすべての要求はprimary犬の結果を返します。React:componentDidMountを再実行する兄弟コンポーネントを再マウントするにはどうすればいいですか?

私はこのようになりますLayout.jsxコンポーネントがあります:this.props.children

<Header /> 
<div> 
    {this.props.children} 
</div> 

を、私はネットワーク要求が行われたTreatsContainerかもしれないが、複数の異なるリソースのためのインデックスページをレンダリングする子コンポーネントの例、すなわちcomponentDidMount/treatsにあり、結果は私のレイアウト内に表示されます。

私が直面している問題は、ユーザーがヘッダーコンポーネントで犬を変更したときに、他のコンポーネントがcomponentDidMountで作成しているのと同じネットワークリクエストを再実行して、新しく選択した犬データが表示されます。私はReduxをアプリケーション内のいくつかの場所に実装していますが、ユーザーが作成できるリソースの数に制限はないため、グローバル状態ツリーにすべてのデータを格納しないことをお勧めします。私がこれを意味するのは、配列の束に、/treats/toys/foodsなどのすべてのデータが必要なわけではありません。この状況を処理するための良いアプローチは何でしょうか?

+2

'Header 'の選択が変更されたときに' Layout'のpropsが変更されますか?もしそうでなければ、彼らはおそらくすべきです。次に、同じネットワーク呼び出しで 'componentWillReceiveProps'を実装することができます(おそらく*両方の*メソッドの外で定義されているので、繰り返す必要はありません)。アンマウント/再マウントをしようとすると、実際の問題に賛成するXYの問題になると思います。あなたはヘッダ選択のための単一のredux状態要素を持ち、 'Layout'をそれに接続することができます。 –

答えて

3

私はあなたの質問を完全に理解しているとは確信していませんが、私はまだ私の能力の中で最高の答えにしようとします。私が理解したところでは、primary dogを設定するHeaderコンポーネントがあります。このprimary dogが変更されたときに、子供のコンポーネントがバックエンドから新しいデータを取得するようにします。私はこれを達成するであろう

方法はReduxのストア内

  1. ストア現在primary dogであり、それが変化したときに、それを更新するために、あなたのHeaderコンポーネントでアクションを発射します。各子コンポーネントから
  2. 、それぞれの子コンポーネントでmapStateToProps
  3. を使用して小道具としてストアからprimary dogにアクセスし、this.props.primaryDog != nextProps.primaryDog
1

は、私は同意するときcomponentWillReceivePropsに関連するデータをフェッチするために、バックエンドへの呼び出しを行います

URLにprimary dogのIDを入れて:@ palsrealmの提案のアプローチは、しかし、ここであなたがを使用している場合は、1つの代替です10

<Route path="/:dogId" component={DogIndex} /> 

ユーザーがプライマリドッグを選択すると、インデックスページにルーティングできます。

<Link to=`/${selectedDogId}` /> 

次に、あなたのコンポーネント(DogIndex)がマウントされ、componentDidMountが発生します。

関連する問題