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

Implementing client side filtering with Apollo link state cache

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

客户端从graphql服务器获取数据后,从Apollo开发工具可以看到数据在本地缓存中。

如何在不访问服务器的情况下获得与一组 'tags' 匹配的 'Item' 类型的列表?

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

我假设这对于 Apollo-link-state 自定义解析器是可行的,但到目前为止还无法找出它的策略或在网上找到示例。

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

更新:

具体要求如下

  1. 从服务器获取 getItem 的前 100 个结果
  2. 用户在客户端通过一些标签过滤结果
  3. 显示已提取的 100 条记录中的筛选项
  4. 从服务器获取更多记录以匹配过滤条件以填充页面的其余部分,最多 100 个项目。
  5. 允许根据筛选条件进行分页。

随着使用量的增加,我们会将大部分项目放入缓存中,从而为大部分数据提供即时过滤体验。

确切的问题是我们可以使用 .readFragment 或 .readQuery 访问原始记录列表并在客户端中动态过滤(如果可以 how/example)?还是有另一种方式来看待这个问题?

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

- 'internal' query can be forced to be cache-only by fetchPolicy

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