ComponentDidCatch вызывается несколько раз

Я визуализирую компонент по нажатию кнопки. Этот компонент выдает ошибку и оборачивается Error-Boundary. Итак, насколько я понимаю из документации, Error-Boundary должен вызываться, а ошибка должна выдаваться только один раз. Но я заметил, что ошибка возникает несколько раз и в среде prod.

Мой componentDidCatch выглядит так:

componentDidCatch(error, info) {
  this.hasError = true;
  this.error = error;
  this.severity = this.props.severity;
}

Когда я console.info внутри componentDidCatch, он печатает его около 9 раз.

Мои компоненты упаковываются следующим образом:

ReactDOM.render(
 <Provider store = {createStoreWithMiddleware(reducers)}>
 <ErrorBoundary severity = "FATAL">
  <App />
 </ErrorBoundary>
 </Provider>, document.getElementById('root'));

Приложение - моя основная составляющая. Приложение снова отображает другие компоненты.

<ErrorBoundary severity = "FATAL">
   <component1 />
</ErrorBoundary>

Ошибка отображается 9 раз. Может ли кто-нибудь помочь мне понять, почему ошибка возникает так много раз?

Никто, кроме вас, не может сказать, почему возникает ошибка, потому что никто, кроме вас, не видел ваш код. В вопросе отсутствует stackoverflow.com/help/mcve, это не по теме и его можно закрыть. Проблема в том, что написано в ошибке. Объект не определен.

Estus Flask 20.11.2018 09:08

@estus как насчет того, чтобы вы прочитали вопрос, который он задает ... дело не в том, что написано в ошибке :)

Stundji 20.11.2018 09:15

@amal Ваш компонент повторно визуализируется несколько раз, поэтому componentDidCatch вызывается несколько раз. Я предлагаю вам переместить componentDidCatch в верхний компонент, чтобы он перехватил все ошибки, возникающие в дочерних компонентах.

Stundji 20.11.2018 09:16

@Stundji Мой комментарий не о том, что написано в ошибке. Дело в том, что вопрос нарушает правила SO и требует, чтобы пользователи размышляли над кодом, а его можно было просто опубликовать.

Estus Flask 20.11.2018 09:23

@Stundji У меня есть общий компонент ErrorBoundary, который обертывает дочерние компоненты, как показано в документации. Я также обернул свои подкомпоненты внутри ErrorBoundary, чтобы в случае сбоя одного компонента не аварийно завершилось все приложение.

amal 20.11.2018 10:05

@estus Извините, если из-за ошибки вопрос запутан. Я просто хотел, чтобы кто-нибудь сталкивался с той же проблемой или имел какие-либо идеи относительно того, что может вызывать многократный рендеринг компонента, поскольку я не использую состояние в моем componentDidCatch. Редактируем вопрос, чтобы убрать сообщение об ошибке :)

amal 20.11.2018 10:07

Как уже предположил Стунджи, имеется несколько ошибок, поскольку внутренняя граница ошибок <ErrorBoundary severity = "FATAL"><component1 />... перемонтирована. На данный момент вопрос не содержит подсказок, почему это может произойти.

Estus Flask 20.11.2018 10:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
7
300
0

Другие вопросы по теме