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

Graphql Apollo客户端-子类型的缓存重定向,graphql,apollo,apollo-client,vue-apollo,Graphql,Apollo,Apollo Client,Vue Apollo,我在生产中使用Apollo大约一年,我正在尝试优化缓存管理。 让我们想象一下以下虚构的简单模式: 类型查询{ 所有书籍:[书籍] 所有杯子:[杯子] 所有颜色:[颜色] } 打字簿{ id:Int 名称:String 封面颜色标识:Int 封面颜色:彩色 } 型杯{ id:Int 名称:String 封面颜色标识:Int 封面颜色:彩色 } 字体颜色{ id:Int 名称:String 十六进制代码:字符串 } 我想配置缓存重定向,以便在我需要Book.CoverColor或Cup.Cover

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

类型查询{
所有书籍:[书籍]
所有杯子:[杯子]
所有颜色:[颜色]
}
打字簿{
id:Int
名称:String
封面颜色标识:Int
封面颜色:彩色
}
型杯{
id:Int
名称:String
封面颜色标识:Int
封面颜色:彩色
}
字体颜色{
id:Int
名称:String
十六进制代码:字符串
}
我想配置缓存重定向,以便在我需要Book.CoverColor或Cup.CoverColor时(例如通过allBooks);它将首先在缓存中查找具有匹配ID的颜色,然后再向服务器请求颜色。 可能吗

提前谢谢

PS:我试过这个,但似乎不起作用:

缓存重定向:{
查询:{
//完美工作的东西
},
书籍:{
//这甚至没有执行:(
封面颜色:(book,args,{getCacheKey})=>{
返回getCacheKey({
__typename:'颜色',
id:book.cover\u color\u id
})
}
}
}

这取决于查询的外观

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

如果查询
allbook
而不点击重定向,那么阿波罗没有理由在
[Book]
的每个元素上使用缓存字段(如果它已经拥有所有数据)

对一本书进行查询,它应该可以像您所期望的那样工作

type Query {
  allBooks: [Book]
  allCups: [Cup]
  allColors: [Color]
  book(id: Int): Book
}
const cacheRedirects:CacheResolverMap={
查询:{
书籍:(uz,args,{getCacheKey})=>
getCacheKey({uuu typename:'Book',id:`${args.id}}),
},
书籍:{
封面颜色:(book,args,{getCacheKey})=>{
返回getCacheKey({
__typename:'颜色',
id:book.cover\u color\u id,
})
},
},
}