Ответ
componentDidCatch и getDerivedStateFromError — оба метода для обработки ошибок в React, но работают по-разному:
- getDerivedStateFromError — статический метод, вызывается при ошибке в дочерних компонентах. Он должен вернуть объект для обновления состояния, чтобы показать fallback UI. Работает на этапе рендеринга, поэтому не должен содержать сайд-эффектов.
static getDerivedStateFromError(error) {
return { hasError: true };
}
- componentDidCatch — вызывается после ошибки, работает на этапе коммита. Позволяет выполнять сайд-эффекты (логирование ошибок и т.д.). Не влияет на состояние напрямую.
componentDidCatch(error, errorInfo) {
logErrorToService(error, errorInfo);
}
Используются вместе в Error Boundary:
getDerivedStateFromErrorдля отображения запасного UIcomponentDidCatchдля логирования и других действий