简述什么是React中的错误边界?

错误边界(Error Boundaries)是React 16引入的一个新特性,它是一种 React 组件,这种组件可以捕获并打印发生在其子组件树任何位置的 JavaScript 错误,并且,它会渲染出备用 UI,而不是渲染那些崩溃了的子组件树。

错误边界在渲染期间、生命周期方法和整个组件树的构造函数中捕获错误。

在一个类组件中,你可以通过定义static getDerivedStateFromError()componentDidCatch()这两个生命周期方法中的任意一个(或两个)来将该类组件变为一个错误边界。

class ErrorBoundary extends React.Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }

  static getDerivedStateFromError(error) {
    // 更新 state 使下一次渲染能够显示降级后的 UI
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    // 你同样可以将错误日志上报给服务器
    logErrorToMyService(error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      // 你可以自定义降级后的 UI 并渲染
      return <h1>Something went wrong.</h1>;
    }

    return this.props.children; 
  }
}

然后你可以将其作为一个常规组件去使用:

<ErrorBoundary>
  <MyWidget />
</ErrorBoundary>

注意,错误边界无法捕获以下场景中产生的错误:

  1. 事件处理(了解更多)
  2. 异步代码(例如 setTimeout 或 requestAnimationFrame 回调函数)
  3. 服务端渲染
  4. 它自身抛出来的错误(并非它的子组件)

这使得错误边界成为一种强大的工具,可以提高React应用的健壮性和用户体验。

发表评论

后才能评论