В моем приложении у меня есть список «советов», которые могут получить либо положительный, либо отрицательный голос в зависимости от их содержания. Мутация gql, которая обновляет эти советы, будет запущена, когда модальное окно, отображающее список, будет закрыто (например, пользователь может отменить свой голос за или передумать).
Мутация, которая обновляет мой сервер выглядит так:
export const VOTE = gql`
mutation vote($tipId: ID!, $vote: VoteAlternative!) {
castVote(tipId: $tipId, vote: $vote) {
id
body
vote
upVotes
downVotes
}
}
`
Я хочу добиться функции, которая проверяет, какие подсказки были изменены, и добавляет их в список мутаций, которые будут выполнены. Примерно так:
const voteCreator = tip => `
castVote(tipId: "${tip.id}", vote: "${tip.vote}") {
id
body
vote
upVotes
downVotes
}`
const mutationRef = useRef(null)
const [voteMutations] = useMutation(mutationRef.current)
const submitVote = useCallback(() => {
if(tips && voteListState){
mutationRef.current = gql`
mutation {
//maps over a list that contains the changed tips
${voteListState.map(tipState => voteCreator(tips.find(tip => tip.id === tipState.id)))}
}
`
voteMutations()
}
}, [tips, voteListState, voteMutations])
Я подумал, что обновление ссылки будет уместным, но я не уверен в этом. Я также не очень разбираюсь в GQL, поэтому мне хотелось бы услышать ваши ответы на следующий вопрос: Как это делается с помощью GQL'i sh?