Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про React: hooks, errors

Есть ли в React 18 фичи, которые можно реализовать только в классовых компонентах, но нельзя в функциональных?

Этот вопрос проверяет знание различий между классовыми и функциональными компонентами в React 18, а также понимание их возможностей.

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

В React 18 почти все возможности классовых компонентов можно реализовать в функциональных с помощью хуков. Единственное исключение — Error Boundaries (перехват ошибок в дочерних компонентах). Пока их можно создать только через классовые компоненты или используя готовые npm-пакеты.

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

Функциональные компоненты с хуками в React 18 полностью заменяют классовые. Раньше классы были нужны для состояния (state), жизненного цикла (componentDidMount, componentWillUnmount и др.) и рефов (this.refs). Теперь всё это делается через хуки:

  • Состояние → useState, useReducer

  • Жизненный цикл → useEffect, useLayoutEffect

  • Контекст → useContext

  • Рефы → useRef

Но есть одно исключение — Error Boundaries. Это специальный механизм для перехвата ошибок в дочерних компонентах (например, если компонент упал с ошибкой). В React пока нет хука для этого, поэтому Error Boundaries можно создать только через классовый компонент с методами componentDidCatch и getDerivedStateFromError.

Пример классового Error Boundary

class ErrorBoundary extends React.Component {
  state = { hasError: false };
  static getDerivedStateFromError() { return { hasError: true }; }
  componentDidCatch(error, info) { console.log(error, info); }
  render() { return this.state.hasError ? "Ошибка!" : this.props.children; }
}

// Использование:
<ErrorBoundary>
  <MyComponent />
</ErrorBoundary>

Можно ли обойтись без классов?

  • Да, если использовать готовые решения, например, react-error-boundary. Но внутри таких пакетов всё равно используется класс.

  • Нет, если писать с нуля — без классов или npm-пакетов не получится.

Будут ли Error Boundaries в функциональных компонентах?

Пока React не добавил хук типа useErrorBoundary, но в будущем это возможно.

Вывод

В React 18 нет других фич, кроме Error Boundaries, которые нельзя реализовать в функциональных компонентах. Всё остальное — хуки покрывают. Если нужно ловить ошибки в дереве компонентов, пока придётся использовать классы или готовые библиотеки.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • React

    React

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

#hooks

#errors

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