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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python14 441
  • Облачные технологии10 338
  • QA вакансии3 210
  • Android1 700
  • Инженер данных1 129
  • Продакт-менеджер381

Разработка

  • Backend вакансии1 601
  • iOS1 573
  • AI вакансии776
  • Fullstack вакансии658
  • Frontend вакансии548
  • Mobile вакансии28

По стеку

  • Go7 890
  • Java5 126
  • Node.js1 605
  • Kotlin1 382
  • Rust1 310
  • .NET1 243
  • PHP535
  • C++382
  • C#353

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

  • Kubernetes5 943
  • Linux-инфраструктура4 578
  • DevOps вакансии4 419
  • Terraform / IaC3 306
  • Мониторинг и Observability1 547
  • CI/CD1 465
  • SRE428
  • Кибербезопасность46

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

  • Аналитик данных638
  • Бизнес-аналитик576
  • Data Scientist512
  • Системный аналитик84

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

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

По регионам

  • Вакансии в США32 231
  • Вакансии в Европе12 899
  • Работа в России3 682
  • Вакансии в Канаде2 743

По формату

  • Удалённые вакансии48 631
  • Релокация в США32 231
  • Гибридная работа8 726
  • Офисная работа6 524

По уровню

  • Senior вакансии29 196
  • Middle вакансии12 901
  • Junior вакансии4 717

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

Все компании
  • Wise191 вакансия
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab134 вакансии
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen27 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

Вакансии из 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

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

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