TGViewer
Free React For Beginners Free React For Beginners @reactbeginners · 3.04K subscribers
Post #563 2.06K
Якщо вам сумно постійно писати обробку помилок ви завжди можете написати універсальний компонент:

Для цього потрібно створити класовий компонент (функціональні такого не вміють) в якому реалізувати три методи:

getDerivedStateFromError - оновлює ваш стейт у випадку перехоплення помилки
componentDidCatch - перехоплює помилку і може щось із нею зробити (залогувати, наприклад)
render - відображає контент в залежності від того чи була помилка, чи ні.

В коді це виглядає так:
class SimpleErrorBoundaries extends PureComponent<
SimpleErrorBoundariesProps,
SimpleErrorBoundariesState
> {
static getDerivedStateFromError(error: Error) {
return { hasError: true, error };
}

state = { hasError: false };

render() {
const { children, errorFallback } = this.props;
return this.state.hasError ? errorFallback : children;
}

componentDidCatch(error: Error): void {
this.props.onError && this.props.onError(error);
}
}
Типи виглядають досить просто
type SimpleErrorBoundariesProps = {
children: ReactNode;
errorFallback: ReactNode;
onError?: (error: Error) => void;
};

type SimpleErrorBoundariesState =
| { hasError: false }
| { hasError: true; error: Error };


Тепер ви можете писати код накшталт такого:
<SimpleErrorBoundaries errorFallback={<>Sorry mate</>}>
<ErrorComponent />
</SimpleErrorBoundaries>


❗️Варто пам'ятати:

1) Виключення, які стаються в середині промісів просто так не перехоплюються, для цього потрібно використовувати async/await
2) Виключення, що стаються в середині самого компоненту ErrorBoundaries також не перехоплюються.

Для обробки помилок в Next.JS цей підхід також працює. Але, як ще один варіант, ви можете використати файл error.tsx дефолтний експорт якого буде відображений у випадку, якщо в роуті станеться помилка.

А ось пакет від одного з розробників #React, який вирішує те саме завдання. Майже 4 мільйона скачувань, а він і досі не в основній бібліотеці 😢

@reactbeginners
  • 👍 16
  • 🔥 3
  • ❤ 2
More from @reactbeginners
  1. Sep 29, 2026Як і обіцяв - про БЗВП по свіжих слідах (і заодно про процес). У знайомого злетіло бронюва…
  2. Sep 26, 2026Думаю багатьом буде цікаво щось дізнатися про розробоку в ЗСУ Спробою розповісти трохи тог…
  3. Sep 24, 2026Всім привіт. Давно не бачилися, але до телеграму руки все ніяк не доходили. В лінкедині я…
  4. May 24, 2026Київ, співчуваю. Сам сьогодні в цю ніч був на лукьянівці. Як на мене, найважча ніч за всі.…
  5. Dec 31, 2025З новим Роком. Нехай це буде останній рік війни. А росія нехай отримує те на що заслужила.…
  6. Nov 29, 2025Сподіваюся всі живі. Схоже що це був рекордний наліт. Як бачите - путін не зацікавлений в…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →