缓存失效;当没有任何说数据发生变化的情况下重新获取实践,但它可能有?

时间:2017-09-13 21:25:46

标签: caching graphql apollo react-apollo cache-invalidation

在了解GraphQL和Apollo的过程中,我经历了this tutorial series

它显示了如何创建一个具有以下内容的应用程序:

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

默认情况下,Apollo会缓存查询并出现问题:

  1. 开放频道(/soccer),第一次,缓存中不存在数据,执行查询并将结果存储在缓存中
  2. 返回频道列表视图
  3. 打开其他频道(/baseball
  4. 其他访问者为/soccer
  5. 添加了一条消息
  6. 返回频道列表视图
  7. 开放渠道(/soccer),由于商店中存在数据 - 陈旧的数据被加载,因为没有任何说明数据陈旧且应该被重新提取
  8. 我似乎找不到合理的方法来解决它。不寻找代码,只是一些关于如何使用GraphQL处理它的好方法。

    我尝试将fetchPolicy更改为cache-and-network,但它并不要求更多数据 - 同样适用,没有任何说数据是陈旧的。 network可以工作,但这可以解决缓存问题 - 当它符合要求时,这是一个可行的解决方案,但我实际上不需要进行一些缓存。

    我想到的可能选项:

    • 单独查询:一个用于主要渠道详细信息,一个用于消息。将邮件fetchPolicy设置为network。可行选项,但发送已有的数据。
    • 单独查询。消息正在分页。加载后确定是否首次加载并fetchMore
    • 利用GraphQL订阅通知服务器端事件,使用它来确定是否应该重新获取。引入其他一些细微差别,例如,如果我已经离开它,我应该多久听一下频道X的事件。

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

0 个答案:

没有答案