【问题标题】:Implementing client side filtering with Apollo link state cache使用 Apollo 链路状态缓存实现客户端过滤
【发布时间】:2019-02-15 16:28:24
【问题描述】:

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

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

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

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

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

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

更新:

具体要求如下

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

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

确切的问题是我们是否可以使用 .readFragment 或 .readQuery 访问原始记录列表并在客户端动态过滤(如果可以的话/示例)?或者有其他的方式来看待这个?

【问题讨论】:

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


    【解决方案1】:

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

    example - 'internal' 查询可以被fetchPolicy 强制为cache-only

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

    【讨论】:

    • 感谢您的回答,我应该更清楚确切的用法。我已经更新了上面的问题。如果你能看看就太好了!
    • 实际上,尝试 IRL,“缓存优先”获取策略提供几乎相同的体验。谢谢!
    猜你喜欢
    • 2020-02-15
    • 2017-03-18
    • 2018-07-08
    • 1970-01-01
    • 2020-08-07
    • 2019-07-12
    • 2021-04-21
    • 2020-11-03
    相关资源
    最近更新 更多