Сколько значений возвращает хук useQuery
Что проверяют
Внимательность к тому, чем вы пользуетесь каждый день. Правильный ответ короткий: useQuery возвращает один объект, а не пару значений. Дальше вопрос разворачивается в разговор про поля этого объекта и про то, различаете ли вы состояние данных и состояние сетевого запроса.
Как отвечать
Скажите, что значение одно, а деструктуризация в фигурных скобках создаёт иллюзию нескольких. Путаница идёт от useState, который отдаёт массив из двух элементов, поэтому там важен порядок, а здесь имена.
const { data, error, status, fetchStatus, isFetching, refetch } =
useQuery({ queryKey: ["jobs", filters], queryFn: fetchJobs });Дальше по полям. status отвечает на вопрос, есть ли данные: ожидание, ошибка или успех. fetchStatus отвечает на другой вопрос, идёт ли запрос прямо сейчас, и живёт независимо: при фоновом обновлении данные уже есть, а запрос снова в работе. Отсюда практическое правило: полноэкранный скелетон показываем по первому признаку, ненавязчивый индикатор по второму. Кроме них в объекте есть refetch, счётчик неудачных попыток, время последнего обновления и признак устаревших данных.
Если библиотека другая, скажите об этом прямо: у клиента GraphQL хук с тем же именем тоже возвращает объект, но набор полей свой, например подгрузка следующей порции.
Где спотыкаются
Отвечают «два, как у состояния», по аналогии с базовым хуком. Это ровно та ошибка, ради которой вопрос и задают.
Второе: вешают крутилку на признак идущего запроса и получают мигание интерфейса при каждом фоновом обновлении, например при возврате фокуса на вкладку. Различать первую загрузку и повторную нужно осознанно.
Третье: показывают устаревший вызов, где ключ и функция передаются отдельными аргументами. Сейчас хук принимает один объект настроек, да и имя пакета с тех пор сменилось. Такие детали проверяются мгновенно и сразу показывают, когда вы последний раз обновляли зависимости.