Фильтрация с помощью решателей кеша Apollo - PullRequest
0 голосов
/ 19 ноября 2018

Я недавно начал использовать 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?

...