Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: custom hook, useEffect, fetch, reusability, abstraction

В каких случаях стоит выносить логику с useEffect и fetch в кастомный хук?

Вопрос проверяет понимание принципов абстракции и переиспользования логики в React с помощью кастомных хуков.

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

Выносить логику с useEffect и fetch в кастомный хук стоит, когда эта логика повторяется в нескольких компонентах. Это улучшает читаемость кода, упрощает тестирование и позволяет централизованно управлять состоянием загрузки, ошибок и данных. Кастомный хук инкапсулирует побочные эффекты и делает компоненты более чистыми.

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

Когда выносить логику с useEffect и fetch в кастомный хук

В React компоненты должны быть сосредоточены на отрисовке UI, а не на управлении побочными эффектами. Если вы замечаете, что один и тот же паттерн с useEffect и fetch повторяется в нескольких компонентах, это явный сигнал к вынесению логики в кастомный хук. Это не только уменьшает дублирование кода, но и делает компоненты более читаемыми и тестируемыми.

Пример: без кастомного хука

function UserProfile({ userId }) {
  const [user, setUser] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    fetch(`/api/users/${userId}`)
      .then(res => res.json())
      .then(data => {
        setUser(data);
        setLoading(false);
      });
  }, [userId]);

  if (loading) return <div>Loading...</div>;
  return <div>{user.name}</div>;
}

Пример: с кастомным хуком

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

  useEffect(() => {
    fetch(url)
      .then(res => res.json())
      .then(data => {
        setData(data);
        setLoading(false);
      });
  }, [url]);

  return { data, loading };
}

function UserProfile({ userId }) {
  const { data: user, loading } = useFetch(`/api/users/${userId}`);
  if (loading) return <div>Loading...</div>;
  return <div>{user.name}</div>;
}

Когда это особенно полезно

  • Логика загрузки данных используется в нескольких компонентах (например, списки, детальные страницы).
  • Вы хотите добавить обработку ошибок, отмену запросов или кэширование централизованно.
  • Компонент становится слишком большим из-за смешивания логики и UI.

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

  • React

    React

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

#custom hook

#useEffect

#fetch

#reusability

#abstraction

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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