Реакция Аполлона: один запрос, несколько аргументов - как кешировать?
Я озадачен этим.
Предположим, у меня есть следующий запрос:
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 с воспроизведением.