Выбор ответа Middle Архитектура состояния обновлено
Фильтры в queryKey
Вопрос
Что произойдёт, если не включить filters в queryKey?
const { data } = useQuery({
queryKey: ['products'],
queryFn: () => api.getProducts(filters),
});
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Данные не перезапросятся: вернётся кеш для старых фильтров. Ключ кеша это единственное, по чему библиотека понимает, что данные другие.
Варианты ответа
- TanStack Query сам заметит изменения замыкания и перезапросит
- Будет ошибка TypeScript о несовпадении типа ключа и функции
- Запрос будет повторяться бесконечно при каждом рендере
- Данные не перезапросятся: вернётся кеш для старых фильтровправильный ответ
Разбор
Ключ кеша это единственное, по чему библиотека понимает, что данные другие. Всё, от чего зависит queryFn, должно быть в queryKey. Замыкание она не отслеживает. Типы такую ошибку не ловят, её ловит ESLint-плагин @tanstack/eslint-plugin-query. Бесконечного цикла не будет, будет устаревшая выдача.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.