Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Apollo:graphql错误后如何处理缓存?_Reactjs_Graphql_Apollo_React Apollo - Fatal编程技术网

Reactjs Apollo:graphql错误后如何处理缓存?

Reactjs Apollo:graphql错误后如何处理缓存?,reactjs,graphql,apollo,react-apollo,Reactjs,Graphql,Apollo,React Apollo,我知道如何在成功变异后更新缓存(使用update)。 我知道如何自己处理错误(在客户端上使用try/catch和全局onErrorconfig) 发生变异错误后,如何更新缓存? 我之所以需要它,是因为我正在缓存中处理每个字段加载字段(作为本地@client字段),并且我希望在变异失败后将它们设置为false(如果需要,还返回字段的上一个值)。您是否有更好的概念来处理每个现场装载指示器 我目前正在使用withApollo获取客户端,然后使用client.cache.writeData手动操作缓存。

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

发生变异错误后,如何更新缓存? 我之所以需要它,是因为我正在缓存中处理每个字段加载字段(作为本地
@client
字段),并且我希望在变异失败后将它们设置为
false
(如果需要,还返回字段的上一个值)。您是否有更好的概念来处理每个现场装载指示器

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


还有其他方法吗?

您应该使用
客户端.writeData
而不是
缓存.writeData
——后者不会触发UI中的反应式更新,而前者会。一旦迁移到客户机的版本3,就需要使用<代码> RealSturys或 Read Engult,因为“代码> WordEdabase<代码>将被删除,因此您可以考虑改为这两种方法中的一种。

我认为您的思维方式很好。你能试试client.writeQuery吗?另一个问题可能与您的代码有关,即客户端没有将新值重新提交给dom。(这一问题与graphql数据流无关)如果使用react,一些记忆问题也可能会出现appear@Peter是的,
client.writeQuery
完成了这项工作,尽管我使用了Daniel的建议,并使用writeFragment来证明未来。谢谢谢谢完美的解释。我希望有一些内置功能可以在发生变异错误后访问缓存(很像在
update
成功时),这样就不需要使用阿波罗
。但如果没有-这是我丢失的信息。@davikasis您可以使用
onError
作为回调,但这只作为参数传递错误。如果您使用的是钩子(由于HOC已被弃用,您确实应该这样做),那么钩子结果实际上将包括客户机。