Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 646новых вакансий за сутки·91 617вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 156
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 402 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 103
  • Облачные технологии14 031
  • QA вакансии3 458
  • Backend вакансии2 078
  • Инженер данных1 772
  • Продакт-менеджер1 238

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии973
  • AI вакансии948
  • Frontend вакансии736
  • Mobile вакансии44

По стеку

  • Go8 651
  • Java6 542
  • Node.js2 017
  • .NET1 719
  • Kotlin1 623
  • Rust1 453
  • C#709
  • PHP682
  • C++570

DevOps и инфраструктура

  • Kubernetes7 748
  • DevOps вакансии6 051
  • Linux-инфраструктура5 485
  • Terraform / IaC4 252
  • CI/CD3 239
  • Мониторинг и Observability1 781
  • SRE560
  • Кибербезопасность446

Аналитика и данные

  • Data Scientist1 114
  • Бизнес-аналитик915
  • Аналитик данных828
  • Системный аналитик154

Другие направления

  • Проджект-менеджер606
  • UI/UX дизайн143
  • Ручное тестирование14

По регионам

  • Вакансии в США43 172
  • Вакансии в Европе23 542
  • Вакансии в Канаде4 358
  • Работа в России3 909

По формату

  • Удалённые вакансии72 938
  • Релокация в США43 172
  • Гибридная работа12 392
  • Офисная работа7 088

По уровню

  • Senior вакансии41 839
  • Middle вакансии20 268
  • Junior вакансии6 588

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab138 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме ReactВсе вопросы
ReactMiddleТеория

Как работает обработка ошибок в React? Что такое Error Boundaries?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Error Boundary — класс с static getDerivedStateFromError и componentDidCatch, который ловит ошибки рендера, lifecycle и конструкторов потомков и показывает fallback вместо падения всего дерева. Не ловит ошибки в обработчиках событий, async-коде вне рендера и SSR hydration mismatch.

Пример

import { Component, type ReactNode } from "react";

type Props = { fallback: ReactNode; children: ReactNode };
type State = { error?: Error };

export class ErrorBoundary extends Component<Props, State> {
  state: State = {};

  static getDerivedStateFromError(error: Error): State {
    return { error };
  }

  componentDidCatch(error: Error, info: React.ErrorInfo) {
    // Логирование в Sentry, Datadog и т.д.
    console.error("[ErrorBoundary]", error, info.componentStack);
  }

  render() {
    return this.state.error ? this.props.fallback : this.props.children;
  }
}

// Использование
function WidgetPage() {
  return (
    <>
      <ErrorBoundary fallback={<p>Не удалось загрузить виджет A</p>}>
        <WidgetA />
      </ErrorBoundary>
      <ErrorBoundary fallback={<p>Не удалось загрузить виджет B</p>}>
        <WidgetB />
      </ErrorBoundary>
    </>
  );
}

// С react-error-boundary
import { ErrorBoundary } from "react-error-boundary";
<ErrorBoundary
  fallbackRender={({ error, resetErrorBoundary }) => (
    <div>
      <p>Ошибка: {error.message}</p>
      <button onClick={resetErrorBoundary}>Попробовать снова</button>
    </div>
  )}
  onError={(error, info) => Sentry.captureException(error, { extra: info })}
>
  <HeavyComponent />
</ErrorBoundary>

Оборачивайте независимые поддеревья (виджет, страница), а не всё приложение — ошибка одного виджета не должна гасить остальные.

Разбор

React реализует модель «защитной границы»: ошибки в render-фазе пробрасываются вверх по дереву, пока не натолкнутся на компонент, реализующий контракт Error Boundary. Без такой границы ошибка размонтирует всё дерево, и пользователь увидит пустой экран.

Что происходит внутри

React ищет ближайшего предка с static getDerivedStateFromError(error) или componentDidCatch(error, info). Первый метод возвращает новое state — компонент рендерит fallback. Второй принимает error и info.componentStack и удобен для логирования (Sentry, Datadog).

Граница ловит:

  • ошибки в render-фазе функциональных и классовых компонентов;
  • ошибки в constructor/lifecycle классов;
  • rejected-промисы через use(promise), если они доходят до commit-фазы и не перехвачены вложенной границей.

Граница не ловит:

  • ошибки в обработчиках событий (onClick, onChange) — их ловят локальным try/catch;
  • ошибки в setTimeout, fetch, async-функциях вне render-фазы;
  • SSR hydration mismatch — React пытается восстановиться через client-only rerender самостоятельно.

Хука для Error Boundary до сих пор нет. Класс — единственный официальный способ. Сообщество использует react-error-boundary, которая даёт функциональный API поверх класса.

Подводные камни

  • Граница не ловит ошибки внутри себя. Если ошибка возникает в render самой границы или в её fallback, экран снова падает. Делайте fallback максимально простым, без асинхронных запросов и сложной логики.
  • Ошибки в обработчиках событий невидимы для границы. onClick, onChange — это не render-фаза. Ловите их локально try/catch и отражайте в state: const [error, setError] = useState(null).
  • Logginng может сам упасть. componentDidCatch в production должен быть устойчив к ошибкам сервиса логирования — оберните в try/catch или убедитесь, что Sentry/Datadog SDK не бросает.
  • Пары Suspense + ErrorBoundary обязательны. Rejected-промис от use() ловится Error Boundary. Без неё в паре с Suspense — пустой экран без объяснений. Всегда держите ErrorBoundary рядом с Suspense.
  • SSR-стриминг удваивает логирование. При ошибке ниже Suspense-границы в Next.js стриминге сервер и клиент могут оба зафиксировать одну ошибку. Дедублируйте в Sentry через fingerprint или фильтрацию по environment.
  • Кнопка «Попробовать снова» требует сброса state. Boundary перейдёт обратно в нормальный режим только если её state error сбросить. В react-error-boundary это делает resetErrorBoundary(); в самописной реализации нужно явно вызывать setState({ error: undefined }).
  • Не путайте с window.onerror и unhandledrejection. Error Boundary видит контекст React-дерева (component stack, props). Глобальные обработчики видят все ошибки JS, включая асинхронные. Они дополняют друг друга — используйте оба.
  • В dev-mode поведение отличается. React 18+ в development кратковременно показывает overlay со стек-трейсом перед тем, как передать ошибку в boundary. В production overlay нет. Не удивляйтесь, если в dev всё «мигает» даже при корректно работающей границе.

Типичные ошибки

  • Ожидать, что граница поймает ошибку в onClick.
  • Делать одну границу на всё приложение.
  • Класть в fallback компонент, который сам может упасть.

Что проверяет интервьюер

  • Знает ли, какие ошибки ловятся, а какие нет.
  • Понимает ли отсутствие хука и причины этого.
  • Применяет ли границы вместе с Suspense.

Как вы знаете этот вопрос?

Проверить себя по теме React →

Источники

  • https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary
←Предыдущий вопросКак сравнить React с ближайшими альтернативами по DX, performance, SEO, accessibility, hiring и поддержке команды?Следующий вопрос→Объясните Context API. Каковы его последствия для производительности?

Связанные темы

Reactproduction-resiliencereact-fundamentals

Вакансии с этим навыком

React вакансии
  • Senior Front-end Enginer with React
  • Senior Software Engineer, Bio - iOS
  • Middle .Net Full-Stack Engineer (with React) (#6007)
  • Senior Software Engineer - Fincrime Reporting
  • Software Engineer II

Частые вопросы на собеседовании

  • Что такое хук useEffect и как работает его массив зависимостей?
  • Объясните хук useState. Какие типичные ошибки возникают при обновлении состояния?
  • Объясните правила хуков. Почему хуки нельзя вызывать условно?
  • В каких типах frontend-проектов React даёт реальный выигрыш, а где будет избыточен или неудачен?