React Apollo: обновление кэша списков (с переменными) при добавлении нового элемента - PullRequest
0 голосов
/ 04 февраля 2019

Мне трудно понять, как обновить список элементов (в кеше).Когда новый элемент создается с react-apollo.

Компонент <CreateItemButton /> (в моем случае) не вложен в компонент <ListItems />.Из того, что я могу понять, мне нужно обновить кеш через функцию обновления в моем компоненте createItemButton <Mutation />.

Проблема в том, что когда я пытаюсь store.readQuery({query: GET_LIST_ITEMS, variables: ???}) получить текущий список элементов (чтобы добавить мой недавно созданный элемент), он может иметь переменные / фильтры (для разбиения на страницы, сортировки и т. Д.).

Как узнать, какую переменную передать функции store.readQuery, существует ли какая-то «последняя использованная переменная» вокруг этого, или у вас есть какие-либо другие предложения о том, как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Кажется, это работает, но немного хакерский доступ к cache.watches Set?: S

Хитрость заключается в том, чтобы получить доступ к переменным кэша для данного запроса, сохранить его и выполнить повторное получение с заданными переменными запроса.В моем случае после создания элемента:

export const getGraphqlCacheVariables = (queryName, cache) => {
  if (cache.watches) {
    const watch = [...cache.watches].find(w => !!w.query[queryName]);

    if (watch) {
      return watch.variables;
    }
  }
};

Функция mutation update:

let variables;

const update = (cache, { data }) => {
  if (data && data.createTask && data.createTask.task) {
    variables = getGraphqlCacheVariables('GetTasks', cache);
  }
}

И функция refetchQueries:

const refetchQueries = () => {
      if (variables && Object.keys(variables).length > 0) {
        return [{ query: GET_TASKS, variables }];
      }
      return [];
}

Бот функции update и refetchQueries должны иметь доступ к переменной variables

Преимущество по сравнению с решением в статье Medium заключается в том, что вы не удаляете кэшированные данные.для данного запроса (GET_TASKS) с разными переменными.

0 голосов
/ 04 февраля 2019

Это известная проблема Аполлона, над которой работает команда.Текущие варианты, которые у вас есть, можно найти в этом среднем сообщении .

Это также проблема с удалением / обновлением элемента, когда он есть в списке с фильтрами или нумерацией страниц.

Вот ссылка на открытую проблему на Github об этом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...