2017-10-25 10 views
0

GraphQLサーバは、同じものを共有するオブジェクトの配列を含むデータでクエリに応答します。id別のキーの値。たとえば、次のような配列があります。Apollo Clientは、同じIDと異なる値を持つオブジェクトの配列を最初のオブジェクトのコピーの配列に置き換えます。

[ 
    { id: 123, name: 'foo', type: 'bar', cost: 5 }, 
    { id: 123, name: 'foo', type: 'bar', cost: 6 }, 
    { id: 123, name: 'foo', type: 'bar', cost: 7 }, 
    { id: 123, name: 'foo', type: 'bar', cost: 8 } 
] 

[ネットワーク]タブでは、サーバーからの応答に正しいデータが含まれていることがわかります。しかし、時間によってそれは次のようになります。配列が何かに変換されたアポロクライアントモジュールによって処理を経る:基本的に私たちが見ていることである

[ 
    { id: 123, name: 'foo', type: 'bar', cost: 5 }, 
    { id: 123, name: 'foo', type: 'bar', cost: 5 }, 
    { id: 123, name: 'foo', type: 'bar', cost: 5 }, 
    { id: 123, name: 'foo', type: 'bar', cost: 5 } 
] 

を、もし、アレイ内のすべてのオブジェクトidと同じ値を共有すると、配列内のすべてのオブジェクトが配列内の最初のオブジェクトのコピーになります。

これはApollo Clientの意図した動作ですか?間違ったキャッシングと関係があるかもしれないと思っていたかもしれませんが、Apollo Clientが同じidを持つ後続の配列メンバーが同じオブジェクトであると仮定したのかどうかは疑問でした。

答えて

1

これは意図したとおりの動作です。 Apolloクライアントはidで正規化されます。

+0

ありがとうございます!この答えは時間を節約しました。 – plck

+0

ここに、apolloのドキュメントhttps://github.com/apollographql/apollo-client/blob/master/docs/source/basics/caching.md#normalizationへの参照があります – plck

関連する問題