【问题标题】:Queries overwriting with missing fields in the Apollo cacheApollo 缓存中缺少字段的查询覆盖
【发布时间】:2019-02-22 04:04:33
【问题描述】:

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

  • 包含许多对象和少量字段的查询:

    query {
      object(many=true) {
        id
        name
      }
    }
    
  • 具有单个对象和多个字段的查询:

    query {
      object(many=false) {
        id
        ... (many other fields)
      }
    }
    

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

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

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

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

是否有处理此问题的规范方法?

【问题讨论】:

    标签: graphql apollo react-apollo


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-05-05
      • 2019-04-18
      • 2018-07-08
      • 2021-07-15
      • 2022-12-22
      • 1970-01-01
      • 2020-02-03
      • 2020-06-19
      • 1970-01-01
      相关资源
      最近更新 更多