TL; DR:自分の状態を管理するための複雑なロジックを持つ再利用可能なコンポーネントの場合(店舗、アクション、レデューサーを使って状態を管理する方法は、オートコンプリートや絵文字などのFacebookブックコメントテキストエリアと考える)このコンポーネントの複数インスタンスのうち、ウェブサイト全体に広がっていますか?再利用可能なコンポーネントのRedux状態を整理する方法は?
公式レデックスレポからreal-world exampleと考えてください。それに 我々が持っている:特定のレポを主演しているユーザーのリストが表示され
- RepoPage、
- 特定のユーザによって主演されているレポのリスト
- Listを表示UserPageを、それは
items
とrenderItem
に提供されているユーザーまたはreposのリストを表示できるように一般的です。特にRepoPage
は、User
コンポーネントを使用してレポを主演した各ユーザーを表示し、UserPage
はRepo
コンポーネントを使用して、スター付きレポをそれぞれ表示します。
は、私は本当に状態のすべてが再来になりたいと仮定します。
特に、すべてのRepoPageとUserPageのすべてのリストの状態をReduxによって管理したいとします。これは、既に巧妙な3レベルの深い木で、例での世話をされています
- トップレベルでの鍵は、それが (例ではそれが
- は、コンポーネントが可能なコンテキストの各特定の型のブランチ固有のコンテキスト(
store.pagination.starredByUser[login]
、store.pagination. stargazersByRepo[repo]
)があるように(store.pagination.starredByUser
、store.pagination. stargazersByRepo
) - 次いでとして多くのキーがある
store.pagination
と呼ばれている)であるコンポーネントデータの種類を言います
I FEがありますこれらの3つのレベルは、コンポーネントタイプ、親タイプ、親IDにも対応しています。
しかし、私はこの考え方をどのように拡張して、Listコンポーネント自体に多くの子があり、Reduxで追跡する価値のある状態を扱うかを知りません。
User
コンポーネントがRepo
コンポーネントがその背景色- 各
Repo
の状態をトグルボタンがありそのまま残り:は特に、私はここで解決策を実装する方法を知りたいですコンポーネントはReduxの
によって管理されている(私はいくつかの拡張機能を使用して幸せ私の研究
)まだレデューサーを使用しますが、この質問の目的のために、「単にローカル状態に反応してそれを維持する」と行きたくないReduxの、とこれまで:
- エルムにアクション(メッセージ)が親コンポーネントは、メッセージの「外側エンベロープ」を展開し、子減速に子供を対象とし、内部アクションを提供できるような方法でネストすることができる代数的データ型ているように見えます(アップデータ)。
- それは、アクションのタイプとして文字列を使用するReduxのでは慣例であることから、上記のアイデアの自然な翻訳が接頭辞を使用することであり、これは(foremly Reduxの-ニレとして知られている)ものをprismであるように思いません。
action.type
は、コンポーネントのツリーをパスに伝える部分文字列で構成されています。大藤this commentにプリズムの作者は再来が欠落しているエルムの建築の最も重要な部分は、上記の二つのアプローチは、私は完全には把握していない持ってReusing Reducer Logic - で説明したアプローチの拡大バージョンであるように見える行動
- の組成物であることを説明しtomkisどのようにredux-flyが内部で動作するのですか?
action.type
は、store
の実装パスによってコンポーネントインスタンスを識別するのではなく、コンポーネントツリーのパスにも対応しています。 あなたは目を細めた場合、私にReduxのに非常に似ているようだ
- WinAPIのは、ユニークな
hWnd
identifを使用していますそれは超簡単action
があなたのために意図されていたかどうかをチェックし、store
にあなたの状態でなければならない場所を決定することができ、各制御のためのIER。 - 上記のアイデアは、おそらくコンポーネントの各タイプは、一意なIDによってインデックスを付け、独自のフラットサブツリーを持つDocumentation suggestion/discussion: Reusing Reducer Logicで説明した何かにつながる可能性があります。上記のリンクリンクされたスレッドにdescibed
- もう一つのアイデアは、親がどこにあるかを決定するreponsibleであることを、かつての成分の特定の型の減速を書き、その後も意味している(それを呼び出す親コンポーネントのための減速をさせることです私にはエルムのアーキテクチャに似ているようだ再び、)
- 提案の詳細は、上記の特定の上記の議論では
- を提示されたものに類似変動する非常に興味深い議論More on reusability for custom components - 子供の状態が配置されている店舗wは、子コンポーネントの「テーブル」のための民間のもののための1つ、およびその他:コンポーネントの状態は、枝の二種類でサブツリーがあることを、このように再帰的に店舗のツリーを整理するために、ユーザーナビゲーションによってa proposition含まれていここで、各子コンポーネントの各クラスには独自の「テーブル」があり、子の各インスタンスにはそのテーブル内の一意のキーがあり、その状態は再帰的に格納されます。これらの子にアクセスできるユニークなキーは「プライベート」セクションに格納されます。これは私がWinAPIを想像する方法と実際に似ています:)
- 別のスレッドによるユーザーsompylasarの別のelm-inspired propositionは、「matrioshka」スタイルのペイロードとして子どものためのアクションを含むアクションを使用することです。これは私の意見では、コンストラクタはElmにネストされています
- redux-subspaceが推奨されましたdiscussion about Global Actionsプリムでは、Elmからインスピレーションを得てグローバルな操作を可能にするライブラリとして。
ここでは、還元型部分空間の作成者です。私は最近、「実世界」の例と、それがどのように孤立したコンポーネントで見えるかを突き止めました。レポ[https://github.com/ioof-holdings/redux-subspace/tree/master/examples/real-world]または[サンドボックス](https://codesandbox.io/s)をご覧ください。/github/ioof-holdings/redux-subspace/tree/master/examples/real-world)を参照してください。 –