Аполлон читает Фрагмент оптимистичного ответа

Что я пытаюсь делать

  • У меня есть приложение, которое должно работать в автономном режиме.
  • Есть Список предметов. Я могу добавить в этот список элемент с изменением.
  • Функция обновления мутации добавляет элемент в список элементов. (Оптимистичный ответ)
  • Когда я нажимаю на элемент, я хочу увидеть подробности.

Моя реализация

Содержание функции обновления мутации:

  const queryData = cache.readQuery<{ items: Item[] }>({
    query: MY_QUERY,
    variables: {
      filter
    }
  });
  if (!queryData?.items) {
    return;
  }
  const newData = [...queryData.items, newItem];
  cache.writeQuery({
    query: MY_QUERY,
    data: { items: newData },
    variables: {
      filter
    }
  });

Получите подробную информацию об элементе в vue-файле:

apolloProvider.clients.defaultClient
      .readFragment<Item>({
        fragment: ITEM_FRAGMENT,
        id:id
      });

Проблема

Добавление элемента в результат запроса работает нормально. Когда я пытаюсь прочитать фрагмент:

  1. Я получаю null для элементов, которые были добавлены функцией обновления мутации
  2. Я получаю ожидаемый объект для элементов, которые были извлечены из бэкэнда. В readFragment также есть атрибут optimistic, но это не имеет значения.

Другие наблюдения

Когда я пишу и сразу же читаю фрагмент в функции обновления мутации, я могу его получить.

  cache.writeFragment({
    fragment: ITEM_FRAGMENT,
    data: item,
    id: item._id,
  });
  const data = cache.readFragment({
    fragment: ITEM_FRAGMENT,
    id: item._id,
  });
  console.log({ data }); // This logs my item Object

Версии пакета:

{
"@nuxtjs/apollo": "^4.0.1-rc.3",
"apollo-cache-persist": "^0.1.1",
"nuxt": "^2.0.0",
}

Резюме

apollo.readFragement не работает для значений оптимистичного ответа.

Может быть, у кого-то здесь есть представление о том, чего мне не хватает, или другой подход к реализации этой функции.


person David    schedule 25.08.2020    source источник
comment
Удалось ли вам найти какую-либо другую информацию по этому поводу?   -  person Switch386    schedule 02.11.2020
comment
Нет, к сожалению нет :(   -  person David    schedule 16.11.2020


Ответы (1)


Чтобы получить оптимистические значения из кеша apollo, вам нужно добавить true в качестве второго параметра в вашем readFragment вызове.

readFragment(options, optimistic)

(optimistic по умолчанию false.)

В твоем случае:

apolloProvider.clients.defaultClient
  .readFragment<Item>({
    fragment: ITEM_FRAGMENT,
    id:id
  }, true);
person kayes    schedule 21.12.2020
comment
Спасибо за ваш ответ, я посмотрю в следующем году и обновлю этот вопрос, сработало это или нет. - person David; 22.12.2020