更新Apollo客户端缓存中的嵌套对象时发生错误

时间:2020-10-15 02:03:19

标签: graphql react-apollo apollo-client

想在使用GraphQL方法时寻求帮助,并在更新Apollo Client缓存中的嵌套数据时遇到一个常见问题。

我有以下数据:

user: {
    id: "43fs54k",
    name: "Jason",
    age: 23,
    onboarding: {
        host: {
            services: true
        }
        visitor: {
            locations: false
        }
    }
}

现在,我已经为用户入职 HostOnboarding VisitorOnboarding 定义了一种类型。 所以我的架构看起来像这样:

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
}

我的问题是这些(关键是第二个问题):

  1. 我在React中使用部分数据(用户的ID和名称) 组件,但是当我触发一个深层次的突变时(例如 我更新了ID,然后在VisitorOnboarding内部更新位置布尔值) 提取时来自用户的名称。有一些问题 Github有点类似,但尚未找到明确的答案。 很快,这是由于接收数据时 缓存正在使用新数据更新时的时间间隔,因此在那时 ID和名称未定义,应用程序中断。

  2. 即使在第一种情况下,我的问题也不是真正地更新嵌套对象,因为如果嵌套对象具有ID,则在突变后一切都像吊饰一样工作。因此,方法问题是是否可以为 HostOnboarding VisitorOnboarding 声明类型(如我目前所做的那样),还是应该声明JSON类型的自定义标量以避免我的第一个问题。

我很确定(希望我没错)第二个问题的答案将为我解决第一个问题的道路,我真的怀疑为每个嵌套定义一个类型是否正确没有ID的对象。

请注意,入职和所有嵌套数据下的键不必具有ID原因,而只是标志。

0 个答案:

没有答案