Я пытаюсь создать новый элемент в массиве с помощью мутации, а затем обновить интерфейс в соответствии с.
Моя схема выглядит следующим образом:
account {
id
acronyms {
id
name
description
}
}
Запрос на получение сокращений:
export const GET_ACRONYMS = gql`
query Acronyms {
acronyms {
id
name
description
}
}
`;
У меня есть мутация создания:
mutation createAcronym($name: String, $description: String) {
createAcronym(acronym: $name, description: $description) {
__typename
acronyms {
__typename
id
name
description
}
}
}
Метод реагирующего рендера:
public render () {return ({({loading, error, data}) => {if (loading) {return;}
if (error) {
this.props.enqueueSnackbar('Unable to get acronyms', { variant: 'error' });
throw error;
}
return (
<Mutation
mutation={mutations.createAcronym.mutation}
onError={this.mutateError('Unable to create new acronym')}
>
{mutate => (
<div>
<Grid container={true}>{data.acronyms.map(this.renderAcronym)}</Grid>
<Button color="primary" onClick={this.addAcronym.bind(this, mutate)}>
<Add style={{ marginRight: 5 }} />
Add Acronym
</Button>
</div>
)}
</Mutation>
);
}}
</Query>
);
}
Метод renderAcronym отображает мутацию и пользовательский интерфейс для сокращений, эта часть работает нормально, я могу редактировать данные, как ожидается, и пользовательский интерфейс и Backend все работают.
Однако, когда я нажимаю Add Acronym
Я вижу успешное создание новой аббревиатуры с ответом от сервера. Чего я не могу сделать, так это прикрепить эту новую аббревиатуру к текущему запросу GET_ACRONYMS. Если я обновляю страницу, вновь созданная аббревиатура отображается кактеперь возвращается GET_ACRONYMS.
Я думал, что мой подход может быть неправильным. Я вижу, что в этом примере приложения они используют подписки https://github.com/gsans/todo-apollo-v2-react/blob/master/src/App.js
Я предполагаю, что это можно сделать без подписоки мне просто нужно, чтобы клиент Apollo зналэтот новый ресурс в аккаунте> аббревиатуры.Я пытался посмотреть на метод обновления, но он не работал.Также попытался refetchQueries: [GET_ACRONYMS]
.
Я также хочу удалить эти ресурсы и думаю, что я столкнусь с подобными проблемами: (
Заранее спасибо.