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

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
)
...
主站蜘蛛池模板: 罗源县| 静宁县| 织金县| 会同县| 彝良县| 祁门县| 类乌齐县| 六枝特区| 承德市| 开江县| 五原县| 炎陵县| 和顺县| 佛冈县| 平利县| 辽中县| 中牟县| 绥德县| 塘沽区| 六安市| 宁远县| 昌都县| 永昌县| 格尔木市| 宕昌县| 娄烦县| 阿荣旗| 涞水县| 伊金霍洛旗| 宁明县| 都匀市| 灵武市| 萨迦县| 阜城县| 于田县| 大荔县| 西充县| 岚皋县| 沂源县| 晋州市| 绥阳县|