2017-02-15 12 views
3

私はReduxで多対多の関係を作成するための良い構造を理解しようとしています。この例では、イメージ(複数のタグを持つことができる)とタグ(複数のイメージを持つことができます)があります。Redux多対多関係

これはReduxで構造化するのに適していますか?

images: { 
    1: { 
     title: "A bunch of hills" 
    }, 
    2: { 
     title: "Hiking in a forest" 
    } 
}, 
tags: { 
    1: { 
     title: "landscape" 
    }, 
    2: { 
     title: "outdoors" 
    } 
}, 
imagesTags: { 
    [ 
     image: 1, 
     tag: 1 
    ], 
    [ 
     image: 1, 
     tag: 2 
    ], 
    [ 
     image: 2, 
     tag: 2 
    ] 
} 

それは私が私のモジュラー構造で台無し別の減速を作成する必要がありますが、私はそれは常に関連の減速を持っていることの結果になるだろうと思いを意味します。

+0

私はあなたがこれをする必要はないと仮定したくはありませんが、私の経験上、このタイプの関係はデータベースのためのものです。画像を関連付けられたタグで送信します。あなたは、真実の源泉となるようにAPIに依拠し、クライアントの公正な愚かさを許します。このタイプのクロス検索がクライアントで必要なユースケースは何ですか? – Samo

+0

私の場合、私はデータベースがありません。これは小さな個人的なプロジェクトで、すべてがブラウザのローカルストレージに保存されます。 – joshhunt

+0

あなたはデータベースを持っていても、彼らは同期していることを確認するために何らかの関係をしたくないでしょうか?たとえば、画像をタグ付きで送信すると、「タグ」ページ を読み込むとどうなりますか?タグとその関連イメージを取得するためにサーバーに別のリクエストを送信しますか?タグからイメージを削除するとどうなりますか?あなたはイメージとタグレデューサーの両方からそれを削除しなければなりませんか? – joshhunt

答えて

3

これは「正規化」状態の例です。 ReduxドキュメントはStructuring Reducersセクションの正規化をカバーしています。 Structuring Reducers - Prerequisite Concepts,Structuring Reducers - Normalizing State ShapeおよびStructuring Reducers - Updating Normalized Dataを参照のこと。また、Redux FAQでは正規化について"How do I organize nested or duplicate data in my state?"について説明しています。

これ以外にも、私はRedux-ORMというライブラリを使用して、Reduxストア内のリレーショナルデータを管理することができます。私はそれをどのように使用するかを議論するいくつかの投稿を書いた:Practical Redux Part 1: Redux-ORM BasicsPractical Redux Part 2: Redux-ORM Concepts and Techniques。私の"Practical Redux" tutorial seriesの残りの部分も、実際にこのライブラリを示しています。

+1

完璧なおかげで!これは私が探していたものの[正確な例](http://redux.js.org/docs/recipes/reducers/NormalizingStateShape.html#relationships-and-tables)です。私はそのようなものを探してみましたが、残念ながらドキュメントはかなり低いと評価されています。後続の質問、なぜ結合テーブルがIDを使用するのですか?トピックの質問から少し離れて、allIdsの目的は何ですか?私はそれが役に立つと思われる例は考えられません。 – joshhunt

+4

"Normalizing State Shape"の文書ページを書きましたが、私はRedux-ORMの構造物の状態の状態の例をベースにしています。 Redux-ORMは、多面的な関係のためにこれらの「スルーテーブル」を定義します。各エントリは技術的にモデルインスタンスの値なので、独自のIDが必要です。 ID配列に関しては、JSエンジンはオブジェクト内のキーを反復するためのかなり標準化されたプロセスを持つようになりましたが、順序付けを定義するためにJSエンジンに依存するべきではありません。 IDの配列を格納すると、アイテムの順序を定義できます。 Redux-ORMは、その "すべての項目のタイプ"ルックアップにその値を使用します。 – markerikson

+1

ああ、感謝します、ありがとう! – joshhunt