【发布时间】:2018-07-13 18:09:19
【问题描述】:
我有一个基于 getAllItems 查询的过滤项目列表,该查询将过滤器和按选项排序作为参数。
创建新项目后,我想删除此查询的缓存,无论传递了什么变量。我不知道该怎么做。
我不认为更新缓存是一种选择。 Apollo 客户端文档中提到的方法(Updating the cache after a mutation,refetchQueries and update)似乎都需要一组给定的变量,但由于过滤器是一个复杂的对象(带有一些文本信息),我需要为每个给定的更新缓存之前提交的一组变量。我不知道该怎么做。另外,只有服务器知道这个新项目如何影响分页和排序。
我不认为fetch-policy(例如将其设置为cache-and-network)是我正在寻找的,因为如果在创建新项目后访问网络是我想要的,当我只是过滤列表(键入要搜索的字符串),我想保持默认行为(cache-only)。
client.resetStore 会为所有类型的查询(不仅是 getAllItems 查询)重置存储,所以我认为这也不是我想要的。
我很确定我在这里遗漏了一些东西。
【问题讨论】:
-
我不太清楚您的需求。但似乎将 fetchPolicy 用于
getAllItems查询,会强制所有搜索来自服务器 -
如果您在突变的
update选项中使用cache.modfiy,它将为它为getAllItems字段缓存的所有参数变体调用您的回调函数,允许您删除已删除的他们中的任何一个项目。
标签: graphql react-apollo apollo-client