В чем разница между componentDidCatch и getDerivedStateFromError

«В чем разница между componentDidCatch и getDerivedStateFromError» — вопрос из категории React, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

componentDidCatch и getDerivedStateFromError — оба метода для обработки ошибок в React, но работают по-разному:

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

Используются вместе в Error Boundary:

  • getDerivedStateFromError для отображения запасного UI
  • componentDidCatch для логирования и других действий