Обновление локального состояния при создании и удалении ассоциаций в клиенте Apollo

У меня есть объекты типа student и team в моей схеме и таблица 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? Я хотел бы знать, как лучше всего сделать это с состоянием связи Аполлона.

Спасибо!


person calben    schedule 12.03.2019    source источник


Ответы (1)


Вам нужно сделать это вручную, используя переданную update поддержку:

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 })
    }
  }
}

также ознакомьтесь с этой частью документы

person Andreas Köberle    schedule 13.03.2019