Я использую Apollo Dev Tools для Chrome, и я не могу понять, как обновить кэш.
Кеш одинаков после каждого запроса, даже если он отображает правильные данные.
Я разрабатываю приложение CRUD и при удалении хочу, чтобы на странице отображались изменения, внесенные на сервере. После выполнения мутации, которая удаляет элемент в БД, я также хочу удалить этот элемент из кэша.
// mutation
const DELETE_ELEMENT_MUTATION = gql`
mutation DELETE_ELEMENT_MUTATION($id: String!) {
deleteElement(id: $id)
}
`;
// update cache
update = (cache, payload) => {
const data = cache.readQuery({query: queryAllElements});
const result = data.allElements.filter(element => {
const elementId = script._id;
const compareId = JSON.parse(payload.data.deleteElement).id;
return elementId !== compareId;
});
cache.writeQuery({query: queryAllElements, data: result});
};
<Mutation
mutation={DELETE_ELEMENT_MUTATION}
variables={{id: id}}
update={this.update}
>
{(deleteElement) => (
<Icon
onClick={() => {
deleteElement();
}}
/>
)}
</Mutation>
После обновления кеш не обновляется.
Редактировать: изменено
cache.writeQuery({query: getAllElements, data: result});
// to
cache.writeQuery({query: queryAllElements, data: result});