使用 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 访问它,但是如果数据已经存在于客户端缓存中,应该可以获得特定条件下的数据列表?
更新:
具体要求如下
- 从服务器获取 getItem 的前 100 个结果
- 用户在客户端通过一些标签过滤结果
- 显示已提取的 100 条记录中的筛选项
- 从服务器获取更多记录以匹配过滤条件以填充页面的其余部分,最多 100 个项目。
- 允许根据筛选条件进行分页。
随着使用量的增加,我们会将大部分项目放入缓存中,从而为大部分数据提供即时过滤体验。
确切的问题是我们可以使用 .readFragment 或 .readQuery 访问原始记录列表并在客户端中动态过滤(如果可以 how/example)?还是有另一种方式来看待这个问题?
这种功能可以使用apollo-link-state
来实现。
- 'internal' query can be forced to be cache-only
by fetchPolicy
还可以考虑在组件状态中进行简单过滤(或 - 这完全取决于(共享过滤结果)要求。
是否可以查询Apollo客户端缓存获取客户端过滤后的数据列表?
客户端从graphql服务器获取数据后,从Apollo开发工具可以看到数据在本地缓存中。
如何在不访问服务器的情况下获得与一组 'tags' 匹配的 'Item' 类型的列表?
type Item {
id: ID
text: String
tags: [String]
}
我假设这对于 Apollo-link-state 自定义解析器是可行的,但到目前为止还无法找出它的策略或在网上找到示例。
我知道 Apollo 缓存的是已执行查询的数据,可以使用 ID 和 .readFragment 访问它,但是如果数据已经存在于客户端缓存中,应该可以获得特定条件下的数据列表?
更新:
具体要求如下
- 从服务器获取 getItem 的前 100 个结果
- 用户在客户端通过一些标签过滤结果
- 显示已提取的 100 条记录中的筛选项
- 从服务器获取更多记录以匹配过滤条件以填充页面的其余部分,最多 100 个项目。
- 允许根据筛选条件进行分页。
随着使用量的增加,我们会将大部分项目放入缓存中,从而为大部分数据提供即时过滤体验。
确切的问题是我们可以使用 .readFragment 或 .readQuery 访问原始记录列表并在客户端中动态过滤(如果可以 how/example)?还是有另一种方式来看待这个问题?
这种功能可以使用apollo-link-state
来实现。
cache-only
by fetchPolicy
还可以考虑在组件状态中进行简单过滤(或