《十四》React 中的错误边界

错误边界:Error Boundary。是一种 React 组件,用来捕获后代组件错误并渲染除备用页面。

只有类组件才可以成为错误边界。如果一个类组件中定义了 static getDerivedStateFromError()componentDidCatch()这两个生命周期方法中的任意一个或两个时,那么它就变成了一个错误边界。当抛出错误后,要使用static getDerivedStateFromError()渲染备用 UI,使用componentDidCatch()打印错误日志。

错误边界在整个组件树的构造函数、 render() 渲染期间和生命周期方法中捕获错误。无法捕获以下场景中产生的错误:事件处理、异步代码、服务端渲染、它自身抛出的错误而不是它的子组件。

错误边界的工作方式类似于 JS 中的 catch{} ,不同之处在于错误边界只针对 React 组件。
如果一个错误边界无法渲染错误信息,则错误会冒泡至最近的上层错误边界,这也类似于 JS 中 catch{} 的工作机制。
错误边界只适用于生产环境,不适用于开发环境。

// 定义错误边界组件
class ErrorBoundary extends React.Component {
  // 用于标识子组件是否产生错误
  state = { hasError: false } 
  
  // 只要这个错误边界组件包裹的后代组件发生错误,就会触发这个钩子,发生的错误信息会作为参数传入
  static getDerivedStateFromError(error) {
    return { hasError: true }
  }

  componentDidCatch(error, errorInfo) {
    // 可以将错误日志上报给服务器
    ...
  }

  render() {
    if (this.state.hasError) {
      // 可以自定义降级后的 UI 并渲染
      return <h1>发生错误了...</h1>
    }

    return this.props.children;
  }
}

// 使用错误边界组件:可以当做一个常规组件去使用
<ErrorBoundary>
  <MyWidget />
</ErrorBoundary>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值