readFragment для возврата всех объектов типа

#apollo-client

#apollo-client

Вопрос:

я использую клиент Apollo для запроса очень структурированного набора данных с моего сервера. Что-то вроде

Показать
идентификатор
title
...
-Времена года
количество
-эпизодов
идентификатор,
номер
, дата выхода в эфир

Благодаря нормализации мои эпизоды хранятся по отдельности, но я не могу запрашивать их. Например, я хотел бы запросить все эпизоды, чтобы затем отсортировать их по дате для отображения в следующем.

единственный способ, который я вижу, это либо "уменьшить" мой список показов до массива эпизодов, а затем выполнить фильтрацию. Или для выполнения нового запроса к серверу. Но это было бы намного быстрее, если бы я мог получить список всех эпизодов в кэше. К сожалению, с помощью readFragment вы можете запросить только один объект по его идентификатору.

Вопрос: Есть ли способ запросить кеш для всех объектов определенного типа?

Ответ №1:

Ответ запоздал, но мог бы помочь кому-то другому, в настоящее время apollo его не поддерживает. Это проблема здесь с github, а также обходной путь. https://github.com/apollographql/apollo-client/issues/4724#issuecomment-487373566

Вот скопированный обходной путь @superandrew213

 const serializedState = client.cache.extract()

const typeNameItems = Object.values(serializedState)
.filter(item => item.__typename === 'TypeName')
.map(item => client.readFragment({
  fragmentName: 'FragmentName',
  fragment: Fragment,
  id: item.id,
}))
  

Пожалуйста, обратите внимание, что этот метод медленный, особенно если у вас большой объем нормализованных данных.