Graphql 更新Apollo客户端缓存中的嵌套对象时出错

Graphql 更新Apollo客户端缓存中的嵌套对象时出错,graphql,react-apollo,apollo-client,Graphql,React Apollo,Apollo Client,想要寻求有关GraphQL方法的帮助,以及更新Apollo客户端缓存中嵌套数据时的一个常见问题 我有以下数据: user: { id: "43fs54k", name: "Jason", age: 23, onboarding: { host: { services: true } visitor: { locations: fa

想要寻求有关GraphQL方法的帮助,以及更新Apollo客户端缓存中嵌套数据时的一个常见问题

我有以下数据:

user: {
    id: "43fs54k",
    name: "Jason",
    age: 23,
    onboarding: {
        host: {
            services: true
        }
        visitor: {
            locations: false
        }
    }
}
现在我已经为用户登录主机登录访问者登录定义了一个类型。 所以我的模式看起来是这样的:

type User {
    id: ID!
    name: String!
    age: Int!
    onboarding: Onboarding
}

type Onboarding {
    host: HostOnboarding
    visitor: VisitorOnboarding
}

type HostOnboarding {
    services: Boolean!
    ...other boolean fields
}

type VisitorOnboarding {
    locations: Boolean!
    ...other boolean fields
}
我的问题是(关键是第二个问题):

  • 我在React中使用了部分数据(来自用户的id和名称) 但是当我触发一个深层次的突变(比如 更新访客内的位置布尔值登录)I丢失ID和 提取时从用户处获取的名称。这方面有一些问题 Github有点类似,但仍然没有找到明确的答案。 很快,这种情况就会发生,因为在接收数据时有一个小的 timelapse,而缓存正在使用新数据进行更新,所以此时 ID和名称未定义,应用程序中断

  • 即使在第一种情况下,我的问题也不是真正更新嵌套对象,因为如果嵌套对象有ID,那么在发生变异后,一切都会像符咒一样工作。因此,方法问题是为主机登录访问者登录声明一个类型是否可以(就像我目前正在做的那样)或者我应该声明一个JSON类型的自定义标量来避免我的第一个问题

  • 我非常肯定(希望我没有错)第二个问题的答案会给我解决第一个问题的方法,因为我真的怀疑如果每个嵌套对象没有ID,为它们定义一个类型是否正确

    请注意,Onboard下的键和所有嵌套数据不需要ID原因只是标志。

    apollo是一个规范化缓存,因此严格要求ID(或其他类型定义的唯一字段)(请参阅文档)。。。仅用于将不同的onbording[集]匹配到不同的用户/条目