react-component-errors
Version:
This is a little utility that wraps you're ES6 (or even ES5) React Component's lifecycle methods with a try/catch and is useful in development because it exposes errors thrown that are swallowed by React by default. Now you can more easily diagnose errors
87 lines (63 loc) • 2.77 kB
Markdown
# What is it?
This is a little utility that wraps you're ES6 (or even ES5) React Component's lifecycle methods
with a try/catch and is useful in development because it exposes errors thrown that are swallowed by React by default.
Now you can more easily diagnose errors during development.
NOTE: It's not likely a good idea to run with this `enabled` in production as it could affect performance of your React components.
### More details
You can follow [this GitHub Issue](https://github.com/facebook/react/issues/2461) for more details.
Thanks to inspiration from [skiano/react-safe-render](https://github.com/skiano/react-safe-render/blob/feature/safe-methods/index.js).
# Usage with an es7
```
import wrapReactLifecycleMethodsWithTryCatch from 'react-component-errors'
class MyComponent extends React.Component {
componentDidMount(){
throw new Error("Test error");
}
render(){
return <div>Hello</div>;
}
}
```
# Usage without a decorator
```
import wrapReactLifecycleMethodsWithTryCatch from 'react-component-errors'
class MyComponent extends React.Component {
componentDidMount(){
throw new Error("Test error");
}
render(){
return <div>Hello</div>;
}
}
wrapReactLifecycleMethodsWithTryCatch(MyComponent);
```
# Config
```
import {config} from 'react-component-errors'
```
`config.enabled`: default is `true` you can set to false to disable wrapping components with try/catch
`config.errorHandler`: default will `console.error` a helpful error message. See example below to override and customize errorHandler.
# Override errorHandler using config
You can see the below running [in a plnkr](http://plnkr.co/edit/VlYsps?p=preview) where we give the helper our own `errorHandler` which uses [Toastr](http://codeseven.github.io/toastr/) to display error messages.
```
'use strict';
import React from 'react';
import ReactDOM from 'react-dom';
import toastr from 'toastr';
import wrapReactLifecycleMethodsWithTryCatch, {config} from 'npm:react-component-errors';
config.errorHandler = (errorReport) => {
console.error(`Error in ${errorReport.component}.${errorReport.method}(${(errorReport.arguments ? '...' : '')}): ${errorReport.error}`, errorReport);
toastr.error(`Error in ${errorReport.component}.${errorReport.method}(${(errorReport.arguments ? '...' : '')}): ${errorReport.error}`);
};
class MyComponent extends React.Component {
componentWillMount(){
throw new Error("Test error");
}
render(){
return <div>{this.state.message}</div>;
}
}
ReactDOM.render(<MyComponent />, document.getElementById('main'));
```