想在使用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
}
我的问题是这些(关键是第二个问题):
我在React中使用部分数据(用户的ID和名称) 组件,但是当我触发一个深层次的突变时(例如 我更新了ID,然后在VisitorOnboarding内部更新位置布尔值) 提取时来自用户的名称。有一些问题 Github有点类似,但尚未找到明确的答案。 很快,这是由于接收数据时 缓存正在使用新数据更新时的时间间隔,因此在那时 ID和名称未定义,应用程序中断。
即使在第一种情况下,我的问题也不是真正地更新嵌套对象,因为如果嵌套对象具有ID,则在突变后一切都像吊饰一样工作。因此,方法问题是是否可以为 HostOnboarding 和 VisitorOnboarding 声明类型(如我目前所做的那样),还是应该声明JSON类型的自定义标量以避免我的第一个问题。
我很确定(希望我没错)第二个问题的答案将为我解决第一个问题的道路,我真的怀疑为每个嵌套定义一个类型是否正确没有ID的对象。
请注意,入职和所有嵌套数据下的键不必具有ID原因,而只是标志。