在Apollo客户端中创建和删除关联时更新本地状态

时间:2019-03-12 22:15:41

标签: graphql apollo react-apollo apollo-client

我在我的模式中有studentteam类型的对象,还有一个表student_team,用于记录它们之间的关系。 为了管理这些,我使用以下调用:

// to add a student team relationship
mutation CreateStudentTeam($studentId: UUID!, $teamId: UUID!) {
  createStudentTeam(
    input: { studentTeam: { studentId: $studentId, teamId: $teamId } }
  ) {
    student {
      id
    }
    team {
      id
    }
  }
}

// to remove a student team relationship
mutation DeleteStudentTeam($studentId: UUID!, $teamId: UUID!) {
  deleteStudentTeamByStudentIdAndTeamId(input: {studentId:$studentId, teamId:$teamId}) {
    student {
      id
    }
    team {
      id
    }
  }
}

// to view teams with students
query Teams {
    teams {
      nodes {
        id
        name
        students {
          nodes {
            id
            fullName
          }
        }
      }
    }
}

我的应用程序将基于这些关系的数据显示为清单。 一个团队可能会收到一份学生名单。 我对拨打这些电话后如何更新本地状态感到困惑。 最好只使用Teams查询重做对数据的提取吗? 我很想知道如何最好地使用Apollo Link State。

谢谢!

1 个答案:

答案 0 :(得分:0)

您需要使用通过update的prop手动进行操作:

graphql(YourMutation, {
  options: {
    update: (cache, result) => {
      const query = TeamsQuery
      const currentQueryData = cache.readQuery({query})
      const updatedData = //change your data regarding of the mutation
      cache.writeQuery({query, data: graphql updatedData })
    }
  }
}

还可以查看文档的this part