为什么GraphQL将数组中的第一个项目显示为所有项目?

时间:2018-10-21 20:00:11

标签: reactjs graphql react-apollo graphql-js

我正在尝试从GraphQL中获取项目并接收(在“网络”标签中查看): enter image description here

但是当我这样做

console.log(data)

我第一次获得相同的对象很多次。 例如,不是[0,1,2,3,4,5,6],而是[0,0,0,0,0,0]。 怎么了?

1 个答案:

答案 0 :(得分:1)

您的API返回null作为每个项目的id属性的值。阿波罗的InMemoryCache被规范化,并使用每个对象的id__typename作为密钥存储。由于每个项目的ID都相同,因此它们会在缓存中被覆盖。

最简单的解决方案是修复服务器,以便为每个项目正确返回id -这将修复意外的缓存行为。如果由于某种原因每个项目都没有唯一的标识符,则需要实现自己的dataIdFromObject函数并将其传递给InMemoryCache的配置。有关文档中的其他详细信息,请参见here