Graphql Apollo客户端-子类型的缓存重定向
我在生产中使用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
类型查询{
所有书籍:[书籍]
所有杯子:[杯子]
所有颜色:[颜色]
}
打字簿{
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,
})
},
},
}