2

在学习 GraphQL 和 Apollo 时,我浏览了这个教程系列

它展示了如何创建一个应用程序,它具有:

  • 频道列表视图 ( /)
    • 显示所有频道
    • 允许打开频道详细信息视图
    • 允许创建新频道
  • 频道详细信息视图(即/soccer
    • 显示添加到频道的消息
    • 允许用户添加新消息

Apollo 默认缓存查询,这会带来一个问题:

  1. 打开通道(/soccer),第一次,缓存中没有数据,执行查询并将结果存储在缓存中
  2. 返回频道列表视图
  3. 打开不同的频道 ( /baseball)
  4. 其他访客添加消息/soccer
  5. 返回频道列表视图
  6. 打开通道 ( /soccer),由于存储中存在数据 - 加载过时的数据,因为没有任何内容表明数据过时并且应该重新获取

我似乎找不到一个合理的方法来解决它。不是在寻找代码,只是一些关于如何使用 GraphQL 处理它的良好实践。

我尝试更改fetchPolicycache-and-network,但它不要求提供更多数据 - 同样适用,没有任何内容表明数据已过时。network可行,但这会绕过缓存 - 当它符合要求时,这是一个可行的解决方案,但我实际上并不想要一些缓存。

我想到的可能选项:

  • 单独查询:一个用于主频道详情,一个用于消息。将消息设置fetchPolicynetwork。可行的选项,但发送已经可用的数据。
  • 单独的查询。消息正在分页。加载时确定是否首先加载和fetchMore
  • 利用通知服务器端事件的 GraphQL 订阅,使用它来确定是否应该重新获取。介绍了许多其他细微差别,例如,如果我已经离开频道 X,我应该听多长时间的事件。

我知道这取决于项目,但还有哪些其他选择,哪些是受欢迎的,为什么?

4

0 回答 0