Выбор ответа Middle Архитектура состояния обновлено

Фильтры в queryKey

Вопрос

Что произойдёт, если не включить filters в queryKey?

const { data } = useQuery({
  queryKey: ['products'],
  queryFn: () => api.getProducts(filters),
});

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Данные не перезапросятся: вернётся кеш для старых фильтров. Ключ кеша это единственное, по чему библиотека понимает, что данные другие.

Варианты ответа

  1. TanStack Query сам заметит изменения замыкания и перезапросит
  2. Будет ошибка TypeScript о несовпадении типа ключа и функции
  3. Запрос будет повторяться бесконечно при каждом рендере
  4. Данные не перезапросятся: вернётся кеш для старых фильтровправильный ответ

Разбор

Ключ кеша это единственное, по чему библиотека понимает, что данные другие. Всё, от чего зависит queryFn, должно быть в queryKey. Замыкание она не отслеживает. Типы такую ошибку не ловят, её ловит ESLint-плагин @tanstack/eslint-plugin-query. Бесконечного цикла не будет, будет устаревшая выдача.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.