как ловить ошибки глобально в приложении реагировать - PullRequest
0 голосов
/ 18 октября 2018

У меня есть два следующих файла:

//index.js

ReactDOM.render(<App />, document.getElementById('root'));

и

// App.js
setTimeout(() => { throw new Error('An error')}, 3000)

class App extends Component {
  render() {return (<div>Hello</div>)}
}

Я хочу перехватить эту ошибку вне файла App.js, возможно, в index.js.Я попытался использовать ErrorBoundries (https://reactjs.org/docs/error-boundaries.html),, но ясно, что он не будет перехватывать ошибки вне жизненного цикла компонента.

Кто-то предложил мне использовать обработчик ошибок window.onerror. Моя проблема в том, что даже еслиодна из внешних библиотек выдала ошибку, это вызвало бы ошибку. Есть какие-либо комментарии по этому поводу?

1 Ответ

0 голосов
/ 18 октября 2018

Если вы пытаетесь отловить ошибки в глобальном масштабе, которые не включают в себя материалы сторонних производителей, то не throw свои собственные ошибки, просто используйте функцию и добавьте туда

Используя свой точный код:

// utils.js
export default {
  throw: err => { throw new Error(err) }
}

// App.js
import utils from 'utils'

setTimeout(() => { utils.throw('An error') }, 3000)

class App extends Component {
  render() {return (<div>Hello</div>)}
}
...