React 第二十三章 使用错误边界捕获渲染错误

在 React 中,错误边界是一种能够捕获并处理渲染错误的机制。当渲染期间发生错误时,React 会中止渲染并显示错误信息,以防止错误的影响传播到整个应用程序。

使用错误边界有助于提高应用程序的可靠性和稳定性。在处理大型复杂应用程序时尤为重要,因为单个组件的错误可能会导致整个应用程序的崩溃。

要使用错误边界,需要创建一个继承自 React.Component 的类组件,并实现 static getDerivedStateFromError(error) 或者 componentDidCatch(error, errorInfo) 生命周期方法。

getDerivedStateFromError和 componentDidCatch区别

  • getDerivedStateFromError 静态方法

    • 运行时间点:渲染子组件的过程中,发生错误之后,在更新页面之前(整个应用没有崩溃,直接渲染降级 UI)
    • 注意:只有子组件发生错误,才会运行该函数
    • 该函数返回一个对象,React 会将该对象的属性覆盖掉当前组件的 state
    • 参数:错误对象
    • 通常,该函数用于改变状态
  • componentDidCatch 实例方法

    • 运行时间点:渲染子组件的过程中,发生错误,更新页面之后(整个应用已经崩溃了,之后再重新渲染整个应用,当然会排除有问题的那一部分UI,那一部分渲染降级UI),由于其运行时间点比较靠后,因此不太会在该函数中改变状态
    • 通常,该函数用于记录错误消息

下面是一个简单的错误边界组件的例子:

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

  componentDidCatch(error, errorInfo) {
    // 在这里可以记录错误信息或发送错误报告
    console.error(error);
  }
  
  render() {
    if (this.state.hasError) {
      return <h1>出错了!</h1>;
    }
    return this.props.children;
  }
}

// 使用错误边界包裹子组件
function App() {
  return (
    <div>
      <h1>我的应用程序</h1>
      <ErrorBoundary>
        <MyComponent />
      </ErrorBoundary>
    </div>
  );
}

在上面的例子中,如果 MyComponent 组件抛出错误,错误边界组件会捕获错误并显示一条友好的错误信息。这样可以防止错误影响到整个应用程序的渲染。

注意
错误边界组件主要是用来捕获 UI 渲染时的错误,因此如下场景中错误是无法捕获的

  • 事件处理
  • 异步代码
  • 服务端渲染
  • 它自身抛出来的错误

总之,错误边界组件仅能过处理渲染子组件期间同步错误

  • 12
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值