Что я пытаюсь делать
- У меня есть приложение, которое должно работать в автономном режиме.
- Есть Список предметов. Я могу добавить в этот список элемент с изменением.
- Функция обновления мутации добавляет элемент в список элементов. (Оптимистичный ответ)
- Когда я нажимаю на элемент, я хочу увидеть подробности.
Моя реализация
Содержание функции обновления мутации:
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
});
Проблема
Добавление элемента в результат запроса работает нормально. Когда я пытаюсь прочитать фрагмент:
- Я получаю null для элементов, которые были добавлены функцией обновления мутации
- Я получаю ожидаемый объект для элементов, которые были извлечены из бэкэнда. В 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 не работает для значений оптимистичного ответа.
Может быть, у кого-то здесь есть представление о том, чего мне не хватает, или другой подход к реализации этой функции.