Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: React, custom hook, async state, loading, error handling

Как инкапсулировать загрузку данных (loading, error, data)?

Вопрос проверяет понимание паттернов управления асинхронным состоянием в React, включая обработку состояний загрузки, ошибки и успешного получения данных.

Короткий ответ

Для инкапсуляции состояний loading, error и data используется кастомный хук, который управляет асинхронным запросом. Хук возвращает объект с полями data, loading и error. Это позволяет переиспользовать логику загрузки в разных компонентах и избежать дублирования кода.

Длинный ответ

Инкапсуляция состояний загрузки данных

При работе с асинхронными запросами в React часто требуется управлять тремя состояниями: загрузка (loading), ошибка (error) и успешные данные (data). Инкапсуляция этой логики в кастомный хук позволяет переиспользовать её в разных компонентах, делая код чище и поддерживаемее.

Пример реализации

Создадим хук useFetch, который принимает URL и возвращает объект с состояниями:

import { useState, useEffect } from 'react';

function useFetch(url) {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    const fetchData = async () => {
      try {
        setLoading(true);
        const response = await fetch(url);
        if (!response.ok) throw new Error('Network error');
        const result = await response.json();
        setData(result);
      } catch (err) {
        setError(err.message);
      } finally {
        setLoading(false);
      }
    };
    fetchData();
  }, [url]);

  return { data, loading, error };
}

Использование в компоненте

Компонент просто вызывает хук и отображает соответствующее состояние:

function UserList() {
  const { data, loading, error } = useFetch('/api/users');

  if (loading) return <div>Loading...</div>;
  if (error) return <div>Error: {error}</div>;
  return <ul>{data.map(user => <li key={user.id}>{user.name}</li>)}</ul>;
}

Вывод

Инкапсуляция состояний загрузки в кастомный хук упрощает управление асинхронными данными, улучшает читаемость и переиспользование кода. Этот подход рекомендуется применять в любом React-приложении, где есть запросы к API.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

  • React

    React

Ключевые слова

#React

#custom hook

#async state

#loading

#error handling

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию