2017-05-27 9 views
1

私は状態を正規化しようとしており、完全なリソースを部分的に扱う方法を分かりません。つまり、同じスライスを共有するか、 。部分的および完全なリソース読み込みで正規化された状態

もう少し情報:私はthingsのリストの要求を行うと

、サーバーは、パーシャルのリストで応答します。

[ { id: 1, name: "thing1"}, 
    { id: 2, name: "thing2"}, 
    ... 
    { id: N, name: "thingN"} ] 

私は、単一のthingの要求を行うと、サーバはより完全なオブジェクトを使用して応答します。

{ 
    id: 1, 
    name: "thing1", 
    img_url: "url1", 
    description: "description1", 
    ... and more fields 
} 

部分リストと詳細情報の両方が同時に存在する必要があります。

これらの部分と完全なthingsはすべて同じ状態のスライスになるはずですか?

thingが部分的にまたは完全にフェッチされているかどうかを管理するためのベストプラクティスは何ですか?

ありがとうございました!

答えて

0

1つのアイテムをフェッチする目的は何ですか?おそらくそれを示している?どうしてあなたの状態を次のように設定してください:

this.state = { 
    allThings: [], 
    singleThing: {} 
}; 

それに応じて記入してください。

0

あなたはこのいくつかの方法については行くことができます。詳細ビューを使用するコンポーネントでは、あなたを:あなたがこれを使用する方法

{ 
    id: 1, 
    name: 'thing1', 
    detail: null //this would be a JS object when populated 
} 

  1. はそうのような不完全なオブジェクトを持っていますその状態でヌルをチェックしてください。これにより、将来的に複数のものが必要になる場合や、必要に応じて再度取得する必要がない場合に、負荷の詳細を遅延させることができます。ただし、情報を更新する必要がある場合(これは、nullと最後の取得日の両方を解決しなければならず、失効したデータを作成するために危険な可能性があります)、これは素晴らしいことではありません。

  2. 状態を完全に異なるノードとして管理します。詳細ビューは配列または単なるオブジェクトのいずれかです。このアプローチは、ライフサイクルイベントでオブジェクトを常に更新したい場合(たとえば、常にデータを更新するコンポーネントマウントなど)には効果的です。

私の個人的な好みは#1である - 私はたくさんFirebaseを使用して、これは本当にだけでなく、DBは、データが更新されるときに処理し、その後の状態でそれらを持つことが、私はデータのスーパーを表示することができることを意味し、リアルタイムに動作しますそれがプリロードされている場合はユーザーに素早くアクセスできます。