graphql - Apollo 缓存中缺少字段的查询覆盖
问题描述
我有一种情况,有时我想查询具有几个字段的许多对象的列表,有时只查询一个具有许多字段的对象。例如,考虑以下两个查询:
具有许多对象和少数字段的查询:
query { object(many=true) { id name } }
具有单个对象和许多字段的查询:
query { object(many=false) { id ... (many other fields) } }
我不想在第一个查询中要求更多的字段,因为这将导致请求包含大量数据(否则我可以使字段相同,例如使用 a 来fragment
解决我的问题)。
问题是:缓存中存储的数据是按照__typename
和规范化存储的id
。这意味着如果查询或查询原子相同,它们将相互覆盖。因此,如果第二个查询最后发生,则数据库中的项目没有name
与第一个查询关联的组件所需的字段。
最简单的解决方案就是name
在第二个查询中也询问。问题是这看起来很脆弱且容易出错。例如,一个人可能会创建第三个查询并忘记在name
那里询问。
另一种选择是使它们具有不同__typename
的 ',即在后端区分它们。但这似乎有点人为。查询实际上处理的是同一种对象。
有没有规范的方法来处理这个问题?
解决方案
对于任何在这里结束的人:事实证明,至少在当前版本中(@apollo/client 3.3.6)数据被合并,所以这不是问题。
推荐阅读
- node.js - MongoDB 从 $filter 返回一个对象
- r - 如何在 R 中正确指定状态空间形式的 Arima?
- python - 如何使用 npyscreen 切换当前显示的 Form
- javascript - jQuery 从 JSON 中设置选择选项
- c - 在不使用 GTK 的情况下,在带有 X 的 Gnome 3 中启用客户端装饰需要什么代码?
- dataweave - 根据dataweave中的字段检查增加值
- r - 在 R 中为频率表创建间隔
- mongodb - Mongo 在使用匹配+排序操作进行聚合期间使用了错误的索引
- ios - Flutter iOS 可用相机空数组
- c# - how can i call a tolist () method in actionresult of controller