Я использую 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});
Постараюсь сделать то, что описано в вопросе. Между тем, я не думал, что это важно, на момент написания вопроса моего <Mutation /> - это возврат из <Query />, и думал, может быть, это вызывает проблему?
Ваш запрос чтения использует queryAllElements, а ваш запрос записи - getAllElements.
Моя беда, я непреднамеренно сделал это, сокращая код до самого маленького значимого примера. Это queryAllElements в обеих строках.





Я решил проблему. Оказывается, я обновлял неправильный ключ в кеше.