官术网_书友最值得收藏!

Introduction to error boundaries

This is quite an overlooked feature that came with React version 16. As you should already know, JavaScript can throw errors. Such errors should not break your app, especially if it is from the financial sector. The regular imperative solution from JavaScript is a try-catch block:

try {
// helloWorld function can potentially throw error
helloWorld();
} catch (error) {
// If helloWorld throws error
// we catch it and handle gracefully
// ...
}

This approach is hard to use with JSX. Hence, the React team developed an alternative solution for React views. It's called Error Boundaries. Any class component can become an ErrorBoundary component, given that it implements the componentDidCatch function:

class AppErrorBoundary extends React.Component {
state = { hasError: false };

componentDidCatch() {
this.setState({ hasError: true });
}

render = () => (
this.state.hasError
? <Text>Something went wrong.</Text>
: this.props.children
)
}

export default () => (
<AppErrorBoundary>
<LoginForm />
</AppErrorBoundary>
)
If you follow along with these examples, you may see a red screen with an error nonetheless. This is a default behavior in development mode. You will have to dismiss the screen to see what the app looks like: the error boundary will work as expected. If you switch to release mode, the error screen will not appear.

LoginForm is now wrapped into ErrorBoundary. It catches any error that occurs while rendering LoginForm. If Error is caught, we display a short message stating that Something went wrong. We can get a real error message from the error object. However, it is not good practice to share it with the end user. Instead, send it to your analytics server:

// Chapter 2_View patterns/Example 11/ App.js
...
componentDidCatch
(error) {
this.setState({
hasError: true,
errorMsg: error
});
}

render = () => (
this.state.hasError
? (
<View>
<Text>Something went wrong.</Text>
<Text>{this.state.errorMsg.toString()}</Text>
</View>
)
: this.props.children
)
...
主站蜘蛛池模板: 泸西县| 湘潭县| 任丘市| 长宁县| 兴安县| 托克逊县| 肃宁县| 大同市| 陇西县| 鹤庆县| 城固县| 额济纳旗| 莱州市| 阿拉善右旗| 崇义县| 铜山县| 吉安市| 吴堡县| 佛山市| 延庆县| 余姚市| 炎陵县| 黄石市| 长岛县| 恩施市| 胶州市| 葫芦岛市| 班戈县| 织金县| 封开县| 石城县| 特克斯县| 广丰县| 杭锦后旗| 日土县| 专栏| 长治市| 怀远县| 穆棱市| 廊坊市| 舒城县|