Graphql 阿波罗缓存使用返回的负载重定向

Graphql 阿波罗缓存使用返回的负载重定向,graphql,apollo,react-apollo,apollo-client,Graphql,Apollo,React Apollo,Apollo Client,跳出阿波罗的缓存重定向示例() 现在,我进行以下模式修改 type Query { books: [BookPayload!]! } type BookPayload { books: [Book!]! // other stuff, e.g. bookCount: Int } 在本例中,阿波罗可以通过以下方式检查缓存中是否有任何归还的书籍: cacheRedirects: { Query: { books: (_, args, { getCacheKey })

跳出阿波罗的缓存重定向示例()

现在,我进行以下模式修改

type Query {
   books: [BookPayload!]!
}
type BookPayload {
   books: [Book!]!
   // other stuff, e.g. bookCount: Int
}
在本例中,阿波罗可以通过以下方式检查缓存中是否有任何归还的书籍:

cacheRedirects: {
  Query: {
    books: (_, args, { getCacheKey }) =>
      args.ids.map(id =>
        getCacheKey({ __typename: 'Book', id: id }))
  }
}
但是,我不确定在没有直接返回要检查的类型时如何重定向缓存。我试过各种各样的返回方式,但都没有用


非常感谢您的帮助。谢谢

你的问题不清楚。您说“我不确定在未直接返回被检查的类型时如何重定向缓存”,但您似乎正在检查并返回
[BookPayload

因此,我看不出这有什么不起作用的原因:

cacheRedirects: {
  Query: {
    books: (_, args, { getCacheKey }) =>
      args.ids.map(id =>
        getCacheKey({ __typename: 'BookPayload', id: id }))
  }
}

书籍负载没有id。它只是一个容器。而且,即使它有一个id,也无法工作,因为您需要将书籍与缓存相匹配,而不是BookPayload@D.Walsh嗯。那么只有一个
图书有效载荷
?我认为它保存在缓存中,id为
“$ROOT\u QUERY.books”
(或者
“ROOT\u QUERY.books”
)。我不确定这是否适用于缓存键函数。您也可以尝试将
undefined
作为ID传递。@D.Walsh如果您使用检查商店,您应该能够看到它的ID。