Реакция Аполлона: один запрос, несколько аргументов - как кешировать?

Я озадачен этим.

Предположим, у меня есть следующий запрос:

export const getPokemon = gql`
  query getPokemon($filters: AssetFilters) {
    pokemon(filters: $filters) {
      name,
      generation,
      exp
    }
  }`;

По умолчанию фильтры не передаются, поэтому все возвращается.

Теперь я хотел бы повторно выполнить фильтр как таковой:

this.props.refetch({
  filters: {
    generation: '3rd'
  }
});

Вышеприведенное, кажется, переопределяет локальный кеш исходного запроса!

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

Как я могу преодолеть эту сложность кэширования и заставить Apollo кэшировать эти запросы с разными аргументами отдельно?

1 ответ

Решение

Apollo кэширует каждое поле в результате отдельно на основе аргументов, с которыми оно было вызвано. Если дважды вызывать одно и то же поле с разными аргументами, оно будет иметь две записи в кэше.

Используя Apollo Devtools, вы можете увидеть точное содержимое кеша. Если вы решите, что вызов запроса с другими аргументами перезаписывает исходное содержимое кэша, вам следует рассмотреть вопрос о создании проблемы в репозитории Apollo Client GitHub с воспроизведением.

Другие вопросы по тегам