我的问题的快速总结
我有一个getTracks
查询,它将获取跟踪数据,并采用一些参数进行排序/过滤(限制、偏移、搜索、排序、顺序)。不幸的是,Apollo 会单独缓存所有这些,因此当一个项目在一个视图中被删除时,用户会更改排序顺序并且被删除的项目仍然存在(因为它在缓存中用于不同的参数集)。
细节
这是getTracks
查询以及相关输入类型(在我的服务器端 AppSync 架构中):
input SelectOptions {
limit: Int
offset: Int
sort: String
order: String
search: String
}
type Query {
getTracks(options: SelectOptions): TrackList!
}
type TrackList {
total: Int!
items: [Track!]!
}
在 Vue 客户端中,查询如下所示:
query GetTracks($options: SelectOptions) {
getTracks(options: $options) {
total
items {
id
name
runtime
createdAt
metadata {
trackNum
trackName
artistName
albumName
year
}
}
}
}
第一次显示表格时,项目加载并显示正常(默认排序顺序为 createdAt/desc)。如果我按 createdAt/asc 排序,则会发出网络请求来获取结果,并且它们显示得很好。现在,如果我删除其中一条记录,然后再次按 createdAt/desc 排序,则会显示已删除的项目,因为它是从缓存中提取的。
即使查询有不同的参数,Apollo 有没有办法让它智能地从缓存中删除(或添加/修改)项目?我确实尝试了此处记录@connection
的指令,但它只是使它对表进行排序没有效果(它根本不会从服务器获取)。
我完全被卡住了,准备完全禁用缓存,因为它似乎在现实世界的场景中不起作用。如何保持默认cache-and-network
策略,但在数据更改时让我的表正常运行?