現在、リファクタリングngrxストアを使用する角度アプリケーションには2つのオプションがあります。ここでは、アプリケーションの基本的な構造について説明します。私はほとんど角度のアプリケーションが同じように構築されていると信じている:子コンポーネントのNGRXと状態管理
AppComponent
|-- ContainerComponent
|-- ChildComponent1
| |-- GrandChildComponent
| |-- GrandGrandChildComponent
|-- ChildComponent2
ContainerComponentがStore<AppState>
を注入しました。私が解決しようとしている問題は、GrandGrandChildComponent(DropDownMenuコンポーネント)がアプリケーションの状態に基づいて動作を変更しなければならないということです(つまり、ストアで発生する特定の条件でいくつかのメニュー項目を無効にします)メニュー項目の上にあるContainerComponent
(または他のコンポーネント、必要な祖先ではない)がそれに反応する可能性があります。
それを解決するためのいくつかの方法があります。
- は状態
オプション1が何であるかを知る必要が任意のコンポーネントに注入Store
@Input
/@Output
@Input
から来る状態に依存しています。 しかし、このアプローチでは、グランドの子コンポーネントに状態をパススルーするために不必要な属性を追加する必要がある多くの定型文が追加されています。また、中間コンポーネントは、下にあるコンポーネントで必要なものを知る必要があるため、懸念の原理の分離を解除します。 Grandコンポーネントでのみ利用可能な詳細を知っている場合、ジェネリックコンポーネントを作成するのは簡単ではありません。
一方、アプローチ2は、懸念を分離する問題を解決すると思われ、よりクリーンな実装と思われます。しかし、私は比較的新しいredux
パターンを使用しているので、それは行く方法とおそらく私はリファクタリングで深くなるだろうときに直面する可能性のある落とし穴を知りませんかわからない。
IMOのどちらの方法でも、それぞれのコンポーネントを簡単にテストすることができます。
私はどちらのアプローチをとるべきか疑問に思っています。どんな落とし穴に気づくべきですか?
おかげ