> Как работать с loading и data из useQuery (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: ITQ Group МКБ БАНК
Стек: React
> Пример ответа
В React Query (TanStack Query) работа с loading и data из useQuery строится на состояниях запроса. Основные поля: isLoading (первая загрузка, когда данных ещё нет), isFetching (любая загрузка, включая фоновую), data (результат) и error.
Пример типичного использования:
JSXimport { useQuery } from '@tanstack/react-query';function UserProfile({ userId }) {const { data, isLoading, error } = useQuery({queryKey: ['user', userId],queryFn: () => fetch(`/api/users/${userId}`).then(res => res.json()),});if (isLoading) return <div>Загрузка...</div>;if (error) return <div>Ошибка: {error.message}</div>;return <div>Имя: {data.name}</div>;}
Ключевые моменты:
-
isLoading-trueтолько при первой загрузке без кэша. Для последующих рефетчей используйтеisFetching, если нужно показать индикатор обновления. -
dataможет бытьundefined, пока запрос не выполнен, поэтому всегда проверяйтеisLoadingилиerrorперед рендерингом. -
Для оптимизации UX можно комбинировать: показывать старые данные (если они есть) с индикатором фоновой загрузки, используя
isFetchingиisPreviousData(для пагинации).
Пример с сохранением предыдущих данных:
JSXconst { data, isLoading, isFetching } = useQuery({...});if (isLoading) return <Spinner />;return (<div>{data && <Content data={data} />}{isFetching && <Skeleton />}</div>);
Такой подход делает интерфейс отзывчивым и избегает мерцания при повторных запросах.
> Похожие задачи по frontend
Как обработать ответ API в React
Сколько значений возвращает хук useQuery
Как называется алгоритм сравнения деревьев в React
Какое initial value можно передать в useState в React?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью