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
を持つ後続の配列メンバーが同じオブジェクトであると仮定したのかどうかは疑問でした。
ありがとうございます!この答えは時間を節約しました。 – plck
ここに、apolloのドキュメントhttps://github.com/apollographql/apollo-client/blob/master/docs/source/basics/caching.md#normalizationへの参照があります – plck