Apollo客户端-子类型的缓存重定向

我在生产中使用Apollo已有大约一年的时间,并且我正在尝试优化缓存管理。 让我们想象一下以下虚拟的简单模式:

type Query {
  allBooks: [Book]
  allCups: [Cup]
  allColors: [Color]
}

type Book {
  id: Int
  name: String
  cover_color_id: Int
  CoverColor: Color
}

type Cup {
  id: Int
  name: String
  cover_color_id: Int
  CoverColor: Color
}

type Color {
  id: Int
  name: String
  hex_code: String
}

我想配置cacheRedirects,以便当我需要Book.CoverColor或Cup.CoverColor(例如,通过allBooks)时;它将首先在缓存中查找具有匹配ID的颜色,然后再向服务器询问。 有可能吗?

谢谢!

PS:我尝试过这种方法,但似乎不起作用:

cacheRedirects: {
  Query: {
    // Stuff that perfectly works
  },Book: {
    // this is not even executed :(
    CoverColor: (book,args,{ getcacheKey }) => {
      return getcacheKey({
        __typename: 'Color',id: book.cover_color_id
      })
    }
  }
}
coalawang 回答:Apollo客户端-子类型的缓存重定向

这取决于您的查询的外观。

如果您的allBooks重定向返回ID列表,并且您的查询启用了returnPartialData,则它应该可以工作。

如果您在查询allBooks时未遇到重定向,则阿波罗没有理由在[Book]的每个元素(如果已经具有所有数据)上使用缓存的字段

对一本书进行查询,它应该可以按预期工作。

type Query {
  allBooks: [Book]
  allCups: [Cup]
  allColors: [Color]
  book(id: Int): Book
}
const cacheRedirects: CacheResolverMap = {
  Query: {
    book: (_,args,{ getCacheKey }) =>
      getCacheKey({ __typename: 'Book',id: `${args.id}` }),},Book: {
    CoverColor: (book,{ getCacheKey }) => {
      return getCacheKey({
        __typename: 'Color',id: book.cover_color_id,})
    },}
本文链接:https://www.f2er.com/2979008.html

大家都在问