如何使用Apollo返回部分类型

时间:2019-04-29 19:40:10

标签: graphql apollo react-apollo apollo-client

在我的应用中,我有警报。部分架构:

type Alert {
  id: ID!
  users: [User]
}

type User {
  id
  username
  ... many more calculated fields
}

每个警报可以返回User的列表。这种User类型的构建在计算上非常昂贵,我们实际上只需要几个用户字段即可显示警报。但是,如果我们仅部分构建用户对象,则Apollo将缓存这些部分用户对象,并破坏依赖于“完整” User对象的应用程序的其他部分。避免这种情况需要fetchPolicy: "no-cache",我想保留该缓存。

因此,我试图避免仅为了支持User而返回整个Alert对象。我也遇到过其他类型的问题,并且正在努力为这种情况设计最佳方法。我想出的唯一解决方案是创建“部分类型”,这将是带有字段子集的单独类型。例如:

type Alert {
  id: ID!
  users: [PartialUser]
}    

type PartialUser {
  id
  username
  name
}

这感觉很骇人,就像它违反了DRY原则。

另一种方法可能是在查询后手动更新缓存。这样可以避免部分User对象的缓存,但是仍然让人感到不舒服。我还认为只有突变支持options.update方法来操作缓存。因此,我有些困惑,并且在文档中找不到任何指导。

是否有解决此问题的建议?

0 个答案:

没有答案