1⃣错误边界类必须是类组件

理解:

错误边界(Error boundary):用来捕获后代组件错误,渲染出备用页面

特点:

只能捕获后代组件生命周期产生的错误,不能捕获自己组件产生的错误和其他组件在合成事件、定时器中产生的错误

使用方式:

getDerivedStateFromError配合componentDidCatch

注意 getDerivedStateFromError只能用于打包后生产环境才不报错。

<aside> 🔥 错误边界的使用实在容器发生错误的组件的父组件里面设置的。

</aside>

Untitled

使用代码:

// 生命周期函数,一旦后台组件报错,就会触发
static getDerivedStateFromError(error) {
    console.log(error);
    // 在render之前触发
    // 返回新的state
    return {
        hasError: true,
    };
}

//子组件出现错误的时候会调用这个钩子
componentDidCatch(error, info) {
    // 统计页面的错误。发送请求发送到后台去
    console.log(error, info);
}

完整代码:

父组件

import React, {Component} from 'react';
import Child from "./child";

class Parent extends Component {
    state={
        hasError:'' //标识子组件是否产生错误
    };

    // 生命周期函数,一旦后台组件报错,就会触发
    //parent 子组件出现错误调用 并携带错误信息
    //只能用于打包后生产环境才不报错

    //重点 只能捕获后代组件生命周期产生的错误,不能捕获自己组件产生的错误和其他组件在合成事件、定时器中产生的错误
    //render() 方法也是生命周期函数
    static getDerivedStateFromError(error){
        console.log("error====>",error);
        //需要返回一个state状态 react 会调用setState更新组件状态
        return {hasError: error}
    }

    //子组件出现错误的时候会调用这个钩子
    componentDidCatch(error, errorInfo) {
        //渲染子组件出错 一般用来 统计页面的错误。发送请求发送到后台去
        console.log(error,errorInfo);
    }

    render() {
        return (
            <div>
                <h1>parent</h1>
                {this.state.hasError?<h2>something is going wrong!</h2>:<Child/>}
            </div>
        );
    }
}

export default Parent;