PassFront
  1. PassFront
  2. База знаний
  3. Обработка ошибок

Как понять когда показать пользователю компонент об ошибке?

Обработка ошибок

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

Ошибка рендера — Error Boundary

Исключение в компоненте роняет поддерево (а без границы — всё приложение). Граница ставится по зонам:

<ErrorBoundary fallback={<WidgetError />}>
  <RecommendationsWidget />
</ErrorBoundary>

Правило: граница на уровне зоны, а не всего приложения, чтобы падал виджет, а не страница. Ловит только рендер — не события и не async.

Ошибка запроса — состояние данных

Показывать в месте, где ожидались данные, и с возможностью повтора:

if (error) return <ErrorState message="Не удалось загрузить" onRetry={refetch} />;

Различать: 404 → «ничего не найдено»; 401/403 → редирект/сообщение о доступе; 5xx и сеть → «повторить»; таймаут — ретраи автоматически (React Query).

Ошибка действия — тост/инлайн

Не удалось сохранить, поставить лайк: тост или сообщение рядом с кнопкой; UI не разрушать, ввод пользователя сохранить, оптимистичное обновление откатить.

Ошибка валидации — рядом с полем

Не тост: сообщение у поля, aria-describedby, role="alert", фокус на первое ошибочное поле.

Что показывать пользователю

Человеческий текст, что произошло и что делать («Повторить», «Обновить страницу»), без стектрейсов; технические детали — в Sentry. Не показывать ошибку там, где можно тихо восстановиться (фоновое обновление данных при наличии кеша).

Коротко для собеседования

Ошибка рендера — Error Boundary по зонам (виджет падает, страница живёт). Ошибка загрузки — состояние ошибки на месте данных с кнопкой «Повторить» (различая 404/403/5xx). Ошибка действия — тост с откатом оптимистичного апдейта. Валидация — рядом с полем и с aria. Всегда: понятный текст + действие, детали в мониторинг.

Другие вопросы раздела