【问题标题】:Apollo: How to handle cache after graphql error?Apollo:graphql 错误后如何处理缓存?
【发布时间】:2020-10-12 03:33:34
【问题描述】:

我知道如何在突变成功后更新缓存(使用update)。 我知道如何自己处理错误(在客户端使用 try/catch 和全局 onError 配置)。

如何在突变错误后更新缓存? 我需要这个,因为我正在处理缓存中的每个字段加载字段(作为本地 @client 字段),并且我想在突变失败后将它们设置为 false(并且还返回字段的先前值如果需要的话)。你有更好的概念来处理每个字段的加载指示器吗?

我目前正在使用 withApollo 获取客户端,然后使用 client.cache.writeData 手动操作缓存。它有点工作,但我遇到了渲染问题 - 我可以在控制台/开发人员工具中看到更改,但在实际元素中看不到,并且在元素再次更改后,它会采用更新的加载值。

还有其他方法吗?

【问题讨论】:

  • 我认为你的思维方式很好。你可以试试client.writeQuery吗?其他问题可能与您的代码有关,即客户端没有将新值重新呈现给 dom。(这与 graphql 数据流无关)
  • 如果你使用react,也会出现一些记忆中的问题
  • @Peter 是的,client.writeQuery 完成了这项工作,尽管我使用了 Daniel 的建议并使用 writeFragment 来更好地证明未来。谢谢!

标签: reactjs graphql apollo react-apollo


【解决方案1】:

您应该使用client.writeData 而不是cache.writeData——后者不会触发 UI 中的响应式更新,而前者会。迁移到客户端 3.0 版后,您需要改用 writeQuerywriteFragment,因为 writeData 将被删除,因此您可以考虑改用这两种方法之一。

【讨论】:

  • 谢谢!完美的解释。我希望有一些内置功能可以在突变错误后访问缓存(很像update 成功时),这将节省使用withApollo 的需要。但如果没有 - 这就是我缺少的信息。
  • @DavidAvikasis 您可以使用onError 作为回调,但这只是将错误作为参数传递。如果你正在使用钩子(你真的应该使用,因为 HOC 已被弃用),那么钩子结果实际上将包括客户端。
猜你喜欢
  • 2015-04-06
  • 1970-01-01
  • 2010-12-07
  • 2018-02-20
  • 2019-10-10
  • 2011-07-09
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多