React Apollo: один запрос, несколько аргументов - как кэшировать?

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

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

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

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

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

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

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

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

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


person dipole_moment    schedule 08.05.2017    source источник
comment
Вы нашли решение своей проблемы? В настоящее время я столкнулся с очень похожей проблемой, и я борюсь ...   -  person ClementParis016    schedule 11.03.2019
comment
Я действительно сделал. Я закончил выборку из своего локального кеша с предоставленными фильтрами. По сути, apollo будет хранить не только ваш запрос, но и переменные, которые сопровождают запрос, в качестве ключа кеша. Это означает, что вам нужно будет предоставить их при загрузке данных.   -  person dipole_moment    schedule 11.03.2019
comment
@dipole_moment, можешь немного подробнее рассказать об этом? то есть вы можете указать мне какую-нибудь документацию? Я не думаю, что делаю что-то конкретное с кешированием - просто логика по умолчанию, поэтому я пытаюсь понять, какой дополнительный код мне нужен.   -  person Paulius Liekis    schedule 03.10.2020


Ответы (1)


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

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

person helfer    schedule 08.05.2017