使用 apollo graphql,我有一个修改数据库中“Person”对象的突变
在整个应用程序中,我有各种查询来从“Person”中获取该信息。有时我需要整个对象,有时只需要名称或年龄。有一个人员列表(使用 PERSON_IDS 查询生成),单击列表中的某个项目时,将打开一个对话框,其中包含该人员的所有数据(使用 PERSON_DATA 获取)
查询:
export const PERSON_IDS = graphql(`
query personNames($familyId: String!) {
family(query: { id: $familyId }) {
persons {
id
}
}
}
`)
export const PERSON_DATA = graphql(`
query person($personId: String!) {
person(query: { id: $personId }) {
id
name
age
height
weight
}
}
`)
export const PERSON_NAMES = graphql(`
query personNames($familyId: String!) {
family(query: { id: $familyId }) {
persons {
name
}
}
}
`)
(实际的应用程序更复杂,有很多不同的突变)
突变
export const UPDATE_PERSON = graphql(`
mutation updatePerson($personId: String!, $person: PersonUpdateInput!) {
updateOnePerson(query: { id: $personId }, set: $person) {
id
}
}
`)
我用
来称呼突变const [updatePerson] = useMutation(UPDATE_PERSON, {
refetchQueries: [PERSON_IDS]
})
人员更新后,person_ids列表被刷新,但其他查询返回旧数据!
我无法将所有查询添加到 refetchQueries 数组中,因为数量太多。此外,如果我添加以前从未使用过的查询,我会收到警告
您可以只返回突变中修改后的数据,不需要重新获取其他查询。
所以如果你的突变更新了
name
和 height
:
export const UPDATE_PERSON = graphql(`
mutation updatePerson($personId: String!, $person: PersonUpdateInput!) {
updateOnePerson(query: { id: $personId }, set: $person) {
id
name
height
}
}
`)
这将自动更新您在所有返回
name
的查询中返回的 height
和 Person
与 id
。甚至无需再进行一项额外查询。