首页 > 解决方案 > Apollo 缓存中缺少字段的查询覆盖

问题描述

我有一种情况,有时我想查询具有几个字段的许多对象的列表,有时只查询一个具有许多字段的对象。例如,考虑以下两个查询:

我不想在第一个查询中要求更多的字段,因为这将导致请求包含大量数据(否则我可以使字段相同,例如使用 a 来fragment解决我的问题)。

问题是:缓存中存储的数据是按照__typename和规范化存储的id。这意味着如果查询或查询原子相同,它们将相互覆盖。因此,如果第二个查询最后发生,则数据库中的项目没有name与第一个查询关联的组件所需的字段。

最简单的解决方案就是name在第二个查询中也询问。问题是这看起来很脆弱且容易出错。例如,一个人可能会创建第三个查询并忘记在name那里询问。

另一种选择是使它们具有不同__typename的 ',即在后端区分它们。但这似乎有点人为。查询实际上处理的是同一种对象。

有没有规范的方法来处理这个问题?

标签: graphqlapolloreact-apollo

解决方案


对于任何在这里结束的人:事实证明,至少在当前版本中(@apollo/client 3.3.6)数据被合并,所以这不是问题。


推荐阅读