使用Apollo链接状态缓存实现客户端过滤

时间:2018-09-11 08:00:38

标签: javascript graphql apollo react-apollo apollo-client

是否可以查询Apollo客户端缓存以获取客户端上已过滤数据的列表?

在客户端从graphql服务器获取数据之后,可以将数据视为来自Apollo开发工具的本地缓存。

如何在不访问服务器的情况下获得与一组“标签”匹配的“项目”类型的列表?

type Item {
 id: ID
 text: String
 tags: [String]
}

我认为这对于使用Apollo链接状态自定义解析器是可行的,但是到目前为止,还没有找到解决该问题的策略或在任何在线位置找到示例。

我知道Apollo缓存通过已执行的查询来存储数据,并且可以使用ID和.readFragment访问它,但是如果该数据已经存在于客户端缓存中,则应该可以获取以下内容的列表:特定条件下的数据?

更新

确切要求如下

  1. 从服务器获取getItem的前100个结果
  2. 用户通过客户端上的某些标签过滤结果
  3. 显示已提取的100条记录中的过滤项
  4. FetchMore记录以匹配服务器上的过滤条件,以填满页面的其余部分,最多100个项目。
  5. 允许基于过滤条件的分页。

随着更多使用情况的发生,我们将使大多数项目位于缓存中,从而为大多数数据提供即时过滤体验。

确切的问题是,我们可以使用.readFragment或.readQuery访问记录的原始列表并在客户端中进行即时过滤(如果这样的话/示例)吗?还是有另一种方式看待这个问题?

1 个答案:

答案 0 :(得分:1)

可以使用apollo-link-state来实现这种功能。

example-fetchPolicy可以强制将“内部”查询cache-only

还考虑在组件状态(或other options中进行简单过滤-这全都取决于(共享过滤结果)要求。