Обновление кеша на Apollo Client

Я использую Apollo Dev Tools для Chrome и не понимаю, как обновить кеш.

  1. Кеш остается неизменным после каждого запроса, даже если он отображает правильные данные.

  2. Я разрабатываю приложение 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});
github.com/apollographql/apollo-client/issues/3909
JustinTRoss 29.10.2018 15:49

Постараюсь сделать то, что описано в вопросе. Между тем, я не думал, что это важно, на момент написания вопроса моего <Mutation /> - это возврат из <Query />, и думал, может быть, это вызывает проблему?

That Guy 29.10.2018 16:10

Ваш запрос чтения использует queryAllElements, а ваш запрос записи - getAllElements.

Benjamin Charais 30.10.2018 22:00

Моя беда, я непреднамеренно сделал это, сокращая код до самого маленького значимого примера. Это queryAllElements в обеих строках.

That Guy 31.10.2018 08:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
4
2 329
1

Ответы 1

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

решение

Другие вопросы по теме