使用 Apollo 链路状态缓存实现客户端过滤
Posted
技术标签:
【中文标题】使用 Apollo 链路状态缓存实现客户端过滤【英文标题】:Implementing client side filtering with Apollo link state cache 【发布时间】:2019-02-15 16:28:24 【问题描述】:是否可以查询 Apollo 客户端缓存以获取客户端上过滤数据的列表?
客户端从graphql服务器获取数据后,可以从Apollo开发工具中看到数据在本地缓存中。
如何在不访问服务器的情况下获得与一组“标签”匹配的“项目”类型列表?
type Item
id: ID
text: String
tags: [String]
我认为这对于 Apollo-link-state 自定义解析器是可行的,但到目前为止还无法找出它的策略或在网上的任何地方找到示例。
我知道 Apollo 缓存了已经执行的查询的数据,并且可以使用 ID 和 .readFragment 访问它,但是如果数据已经存在于客户端缓存中,应该可以获得一个列表特定条件的数据?
更新:
具体要求如下
-
从服务器获取前 100 个 getItem 结果
用户在客户端通过一些标签过滤结果
显示已提取的 100 条记录中的过滤项目
从服务器获取更多记录以匹配过滤条件,以填充页面的其余部分,最多 100 个项目。
允许根据过滤条件进行分页。
随着使用量的增加,我们将缓存中的大部分项目,为大部分数据提供即时过滤体验。
确切的问题是我们是否可以使用 .readFragment 或 .readQuery 访问原始记录列表并在客户端动态过滤(如果可以的话/示例)?或者有其他的方式来看待这个?
【问题讨论】:
【参考方案1】:这种功能可以使用apollo-link-state
来实现。
example - 'internal' 查询可以被fetchPolicy 强制为cache-only
还可以考虑在组件状态中进行简单过滤(或other options - 这完全取决于(共享过滤结果)要求。
【讨论】:
感谢您的回答,我应该更清楚确切的用法。我已经更新了上面的问题。如果你能看看就太好了! 实际上,尝试 IRL,“缓存优先”获取策略提供几乎相同的体验。谢谢!以上是关于使用 Apollo 链路状态缓存实现客户端过滤的主要内容,如果未能解决你的问题,请参考以下文章