【问题标题】:Apollo InMemoryCache syntaxApollo InMemoryCache 语法
【发布时间】:2022-01-19 02:40:22
【问题描述】:

我继承了一个项目,该项目使用以下键字段语法设置内存缓存。没有一个例子展示了这个特殊的签名(至少我可以找到)。我在示例中看到的所有字段都使用了多个字段,并放置在关键字段属性中。这是在寻找任何嵌套的“myField”属性吗?这在 graphql 数据中是如何预期的? (Apollo 客户端 3.2)

const cache = new InMemoryCache({
  typePolicies: {
    Query: {
         /// query info
      },
    },
    UserData: {
      fields: {
        fieldA: {
          merge(existing = [], incoming = []) {
            return incoming;
          },
        },
        fieldB: {
          merge(existing = [], incoming = []) {
            return incoming;
          },
        },
      },
      keyFields: [["myField"]], // <-- What is this looking for?
    },    
  },
});

This leads to an invariant violation error:

Uncaught Invariant Violation: Missing field 'myField' while extracting keyFields from {"id":"462a349...... (does not contain myField)

【问题讨论】:

    标签: graphql apollo-client


    【解决方案1】:

    您的代码在字段映射方面看起来不错。另一方面,keyFields 的问题略有不同。你完全可以跳过设置。

    keyFields 的目的是唯一标识您的记录,以便缓存知道如何更新。就像在关系数据库中一样,您的主键由一个或多个列组成,这些列认为您的记录是唯一的。

    我相信这在 Apollo 的文档中有很好的记录,请参阅: https://www.apollographql.com/docs/react/caching/cache-configuration/#customizing-cache-ids

    【讨论】:

      猜你喜欢
      • 2019-12-22
      • 2019-09-27
      • 2018-11-10
      • 2020-11-19
      • 2021-01-22
      • 2020-01-21
      • 2018-09-24
      • 2021-01-15
      • 2020-04-18
      相关资源
      最近更新 更多