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

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
)
...
主站蜘蛛池模板: 唐海县| 吉安县| 舞钢市| 靖江市| 泾源县| 惠来县| 扎鲁特旗| 囊谦县| 高陵县| 湘阴县| 河津市| 桐乡市| 陇川县| 广州市| 明光市| 綦江县| 定远县| 万安县| 嘉祥县| 左贡县| 买车| 五河县| 绥滨县| 习水县| 太白县| 从化市| 招远市| 临汾市| 文成县| 崇义县| 偃师市| 江源县| 郯城县| 棋牌| 股票| 三江| 丰镇市| 贵德县| 弥渡县| 綦江县| 甘南县|