При разработке frontend-приложений важно учитывать ситуации, когда данные от backend еще не доступны. React Query и его хук
useQuery предлагают инструменты для управления этим процессом.Один из ключевых параметров, на который следует обратить внимание, —
isLoading. Он показывает, выполняется ли запрос данных. Если обратиться к data без проверки isLoading, это может вызвать ошибку, так как данные могут быть еще недоступны.const { isLoading, error, data } = useQuery('myData', fetchData);
Правильное использование isLoading включает проверку его значения перед применением данных, как показано в примере:function MyComponent() {
const { isLoading, error, data } = useQuery('myData', fetchData);
if (isLoading) return 'Загрузка...';
if (error) return `Произошла ошибка: ${error.message}`;
return (
<div>
<h1>{data.title}</h1>
<p>{data.description}</p>
</div>
);
}
Здесь, если isLoading = true, компонент просто отображает сообщение «Загрузка...», а использование данных начинается только после их успешной загрузки.Вы можете думать, что проверка
isLoading не всегда необходима и в некоторых случаях можно использовать опциональную цепочку (optional chaining). Однако это может быть опасно. Если данные еще не получены, а мы пытаемся передать их в компонент, ожидающий конкретные данные, это может привести к ошибке. Вот пример:function MyOtherComponent({ title, description }) {
return (
<div>
<h1>{title}</h1>
<p>{description}</p>
</div>
);
}
function MyComponent() {
const { data } = useQuery('myData', fetchData);
return (
<MyOtherComponent title={data?.title} description={data?.description} />
);
}
В этом случае, если данные еще не получены, опциональная цепочка вернет undefined для data?.title и data?.description, что может вызвать ошибку в MyOtherComponent.Даже если проверка
isLoading может показаться излишней, это важный шаг для обеспечения стабильности и надежности вашего приложения, и его не следует игнорировать.@chulakov_dev
