Я делаю приложение со списком задач (только интерфейс) с React, React Apollo и React Link REST. У меня не было проблем с мутацией delete, но мутация put (то же самое и с тем же параметром 'id') не работала. После многих попыток я заставил его работать, но, казалось бы, запутанно.
РАБОТАЕТ:
const deleteTodo = gql`
mutation deleteTodo($id: String!) {
deleteTodo(id: $id)
@rest(type: "task", path: "/{args.id}", method: "DELETE") {
id
title
description
completed
}
}
`
ТАКЖЕ РАБОТАЕТ, НО НУЖНО (см. Args.input.id вместо args.id):
const markComplete = gql`
mutation markComplete($id: String!) {
markComplete(input: {id: $id})
@rest(type: "task", path: "/{args.input.id}", method: "PUT") {
id
title
description
completed
}
}
`
Я передаю идентификатор одинаково для обеих мутаций:
onClick={async (e)=> {
const id = e.currentTarget.value;
await markComplete({
variables: {id},
refetchQueries: [{ query: getTodos }]
})
}}
В примере со странным текстом ясно, что я должен получить доступ к идентификатору изтеперь вложенный объект (args => input => id), но я не понимаю, почему я должен добавить это, чтобы заставить его работать в этом случае.
Мой главный вопрос заключается в том, что я в корне неправильно понимаюо мутациях Аполлона (или, может быть, graphql)?
К вашему сведению: мутация удаления все еще работает, если я реорганизую ее для использования входного объекта.