Я недавно начал использовать Apollo с React и пытаться разобраться с определителями кэша.
Я пытаюсь создать простое приложение для просмотра информации о сериалах / сериалах, у меня есть модели дляShow
, Season
и Episode
.
Начальная страница представляет собой список шоу, при нажатии на одно из которых отображается информация об этом шоу и список сезонов, затем при нажатии на сезон отображается информация.о сезоне и списке эпизодов.
Каждый компонент упакован в компонент Query для получения необходимых данных.Когда приложение запускается, оно выбирает все данные для всех шоу / сезонов, поэтому все будущие запросы должны получать данные из кэша.
Я добавил преобразователь кэша для шоу, который правильно загружает шоу изкеш:
cacheRedirects: {
Query: {
show: (_, { id }, { getCacheKey }) => getCacheKey({
__typename: 'Show',
id,
}),
},
}
Где у меня проблемы с загрузкой данных за сезоны.Запрос:
query ShowSeasons($showId: ID!) {
seasons(showId: $showId) {
number
year
}
}
Данные уже находятся в кэше, единственное отличие от запроса Показать состоит в том, что выполняется фильтрация по showId
вместо id
.
ЕслиЯ смотрю на кеш, используя инструменты разработчика Apollo. Я вижу, что есть запись для Show
и Season
, которая выглядит так:
Show:5beec2785e33a2132a43ad98
id: "5beec2785e33a2132a43ad98"
title: "Show Title"
seasons: [Season]
0: Season:5beee33a378803199f23e0e9
Season:5beee33a378803199f23e0e9
id: "5beee33a378803199f23e0e9"
number: 1
year: 2018
Я пытался поиграться с определителями кеша, но каждыйКогда я пытаюсь загрузить сезоны, он делает другой сетевой запрос вместо того, чтобы получать их из кеша.
Как мне написать распознаватель, который будет выбирать все сезоны, отфильтрованные по showId
?