# 7. 错误边界 这是从 *React 16* 引入了一个新的概念,为了解决的问题就是一个组件出错不至于整个应用崩溃。 首先我们还是来看一个示例: ```js import React from 'react'; import ChildCom1 from "./components/ChildCom1" import ChildCom2 from "./components/ChildCom2" function App() { return (
可以看到,*ChildCom1* 下面的 *ChildCom3* 存在问题,这一个组件的问题会导致整个应用崩溃。
**这在某些场景下,实际上是没有必要的,例如有问题的组件是广告、或者一些无关紧要的组件,此时我们就期望渲染出问题组件以外的组件树。**
错误边界就是用来解决这个问题的。
>错误边界是一种 *React* 组件,这种组件可以捕获发生在其子组件树任何位置的 *JavaScript* 错误,并打印这些错误,同时展示降级 *UI*,而并不会渲染那些发生崩溃的子组件树。错误边界可以捕获发生在整个子组件树的渲染期间、生命周期方法以及构造函数中的错误。
```js
// components/ErrorBoundary.jsx
import React, { Component } from 'react'
export default class ErrorBoundary extends Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error) {
// 更新 state 使下一次渲染能够显示降级后的 UI
return { hasError: true };
}
componentDidCatch(error, errorInfo) {
// 你同样可以将错误日志上报给服务器
console.log("error>>>", error)
console.log("errorInfo>>>", errorInfo)
}
render() {
if (this.state.hasError) {
// 你可以自定义降级后的 UI 并渲染
return
最后需要注意的是,错误边界组件主要是用来捕获 *UI* 渲染时的错误,因此如下场景中错误是无法捕获的:
- 事件处理
- 异步代码
- 服务端渲染
- 它自身抛出来的错误
总之,错误边界组件仅能过处理**渲染子组件期间**的**同步错误**。
---
-*EOF*-