React错误边界

默认情况下,若一个组件在渲染期间(render)发生错误,会导致整个组件树全部都被卸载

错误边界:是一个组件,该组件会捕获到在渲染期间(render)子组件发生的错误,并有能力阻止错误继续传播

让某个组件捕获错误

  1. 编写生命周期函数getDerivedStateFromError
    ● 静态函数
    ● 运行之间点:渲染子组件的过程中,子组件报错之后,在页面更新之前
    ● 注意只有子组件发生错误之后才会运行
    ● 该函数返回一个对象,React会将该对象的属性值覆盖掉当前组件的state
    ● 参数:错误对象
    ● 通常,该函数用来改变状态
  2. 编写生命周期componentDidCatch
    ● 实例方法
    ● 运行时间点:渲染子组件的时候,发生错误,更新页面之后(更新时间靠后,组件都卸载完成了之后才运行这个钩子,运行这个钩子之后再重新构建组件树,性能比较低)
    ● 该函数有两个参数error(报错信息)info(报错位置),通常该函数用于发送给服务器报错信息
    在这里插入图片描述
import React, { PureComponent } from "react";

export default class ErrorBounds extends PureComponent {
  state = {
    hasError: false,
  };
  
  // 当子组件发生错误的时候就会运行这个生命周期
  // 这个对象里面的数据会覆盖掉state里面的值
  // static getDerivedStateFromError() {
  //   return {
  //     hasError: true,
  //   };
  // }

  componentDidCatch() {
    this.setState({
      hasError: true,
    });
  }

  render() {
    if (this.state.hasError) {
      return <div className="">子组件渲染有误</div>;
    } else {
      return this.props.children;
    }
  }
}

细节


某些错误,错误边界不能捕获
● 自身的错误
● 异步的错误(因为捕捉的是渲染期间的错误)
● 事件中的错误

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值