2017-05-07 8 views
2

私は反応を読むことを続けます(反応を使って反応の仕組みを見てみましょう)状態をルートコンポーネントに格納し、状態が変化したときにはツリー全体を再レンダリングする必要があります。反応(フラックス、還元剤など)は、状態のあるサブコンポーネントを持つか、ルートコンポーネントのストア状態を確認する必要がありますか?

現在、私はブートストラップナビゲーションバーを作成しました。

root 
--> NavBar 
    --> NavHeader 
    --> NavMenuBar 
     --> NavMenuItem 
      ... 
--> PageContent 
--> Footer 

NavMenuBarコンポーネントにアクティブなメニューアイテムを保存します。メニュー項目またはサブメニューの1つがクリックされると、コールバックはNavMenuBarの状態を更新するために使用され、変更されたメニュー項目を再レンダリングします。

これはうまくいきましたが、NavMenuBarコンポーネントにアクティブなメニュー項目を格納する必要があるかどうかは疑問です。代わりにルートコンポーネントに状態を格納し、コールバックメソッドを移動してメニュー状態を更新する必要がありますか?ルートアプリがアクティブなメニュー項目を追跡するために必要とする理由私は見ませんが、ブロガー/記事の多くは、私はすべての状態のためのルートコンポーネントを使用しなければならない提案が、このFBページ上:

https://facebook.github.io/react/docs/thinking-in-react.html

の「ステップ4:あなたの国家を特定する必要があるかどうか」の下で、状態を保存する共通の親を見つけて、すべてをルートに格納することについて言及してはいけないと言います。

PS:BSナビゲーションバーをレンダリングするためのNPMコンポーネントがありますが、これについてはリアクションの詳細については自分でやっています。

答えて

1

アクティブなメニュー項目を強調表示することは、アプリケーションにはあまり影響しません。したがって、これらのコンポーネント全体を通してステージを伝播するだけで不必要な定型コードが作成されるため、子コンポーネントでそれを使用することに固執します。

1

のみは全く良い方法ないルートコンポーネントですべての状態を保存!

理由は(既に知っていると^^):そのルートコンポーネントが更新されると(つまり、再レンダリングを意味する)、すべての子孫、孫、その他の孫が不必要に更新されます。 [ - 「ステップ4:あなたの国がすべき場所を特定」https://facebook.github.io/react/docs/thinking-in-react.html彼らはあなたが共通の親は、状態を保存するために見つける必要があると言う]

=>:が正しい我々は唯一の意味、必要な子コンポーネントを更新する必要があります

したがって、あなたの場合、NavMenuBarコンポーネントにアクティブなメニューアイテムを保存するのはです。良い方法はです。

は実際には、「アクティブは」あなたのNavMenuItemに適用され、すべてのNavMenuItemsための「共通」親は確かにNavMenuBarです。

アクティブメニュー項目が変更されると、NavMenuBarはそれ自身を更新し、すべての子を再レンダリングします(NavMenuItems、最後にアクティブな項目は通常に戻り、新しいアクティブな項目はアクティブになります^ ^他のメニューアイテムは再レンダリングされません[他のアイテムには変更がないので、Reactの仮想DOMについてもっと読むことができますが、それは別の物語です^^、これについての記事が1つあります。もっとたくさん:。https://www.accelebrate.com/blog/the-real-benefits-of-the-virtual-dom-in-react-js/]

2

コンポーネントストアの状態のデータと完全にあなたの選択ではありません

は、主に二つの成分の種類、データを持っている一方及び他方その雌ジカがありますそうではありません。これには多くの名前と賛否両論とのわずかな違いがあります。
https://jaketrent.com/post/smart-dumb-components-react/
https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0

人々は、いくつかの定期的な問題に対する解決策をお勧めします。問題がなければ解決策は必要ありません。

関連する問題