带有Apollo客户端的GraphQL,是否可能具有相同的ID和不同的类型名

时间:2019-03-26 17:08:31

标签: graphql apollo-client apollo-boost

我有一个问题,在文档中找不到。 例如,我有一个列表

ID为1,2,3,4的产品

我还有另一个列表,ID为1,2,3,4的类别。

示例查询

{
  products {
     id
     name
     categories {
     id
     name
     }
  }
}

我们可以看到它们在阿波罗中都具有相同的ID,但类型名不同。 缓存数据时会产生任何问题吗?由于Apollo使用ID规范化了我们的数据, 帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

Apollo使用__typenameid(或_id)字段进行规范化,因此具有相同ID的Product和Category通常不会引起任何问题。

客户端通常会为查询中的每个选择集附加__typename,因此您不必亲自添加__typename字段。

传递给InMemoryCache的配置对象包括一个addTypename属性,该属性默认为true。如果将其设置为false,则除非您具有通用的唯一ID,否则不会添加__typename字段,并且在这种情况下,您将看到缓存问题。