如何在突变后重新获取所有查询?

问题描述 投票:0回答:1

使用 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 数组中,因为数量太多。此外,如果我添加以前从未使用过的查询,我会收到警告

graphql apollo react-apollo
1个回答
0
投票

您可以只返回突变中修改后的数据,不需要重新获取其他查询。

所以如果你的突变更新了

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
。甚至无需再进行一项额外查询。

© www.soinside.com 2019 - 2024. All rights reserved.