当前位置: 首页 > article >正文

react防止页面崩溃

在 React 中,ErrorBoundary 组件是一种用于捕获并处理其子组件树中发生的 JavaScript
错误的机制。它可以帮助你在应用程序中实现优雅的错误处理,防止整个应用崩溃,并为用户提供友好的错误提示。ErrorBoundary 通过使用
React 的生命周期方法 componentDidCatch 来捕获错误,并显示备用 UI。

1. 创建 ErrorBoundary 组件
要创建一个 ErrorBoundary 组件,你需要遵循以下步骤:

  • 继承 React.Component:ErrorBoundary 必须是一个类组件。
  • 实现 componentDidCatch 方法:这是
    ErrorBoundary 的核心方法,用于捕获子组件树中的错误。
  • 提供备用 UI:当捕获到错误时,ErrorBoundary
    应该渲染一个备用的用户界面,而不是显示默认的错误堆栈。

2. 所有代码:

import React, { Component } from "react";
import { withRouter } from "react-router-dom";
import { Result } from "antd";
import { CloseCircleOutlined } from "@ant-design/icons";
class ErrorBoundary extends Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }
  componentDidUpdate(prevProps) {
    // 检查路由地址是否发生变化
    const { pathname, search } = this.props.location;
    const { pathname: prevpathname, search: prevsearch } = prevProps.location;

    if (pathname + search !== prevpathname + prevsearch) {
      this.setState({ hasError: false });
      // 你可以在这里执行其他逻辑,比如重新获取数据等
    }
  }

  static getDerivedStateFromError(error) {
    console.error("RSErrorBoundary:", error);
    // 更新状态以显示降级 UI
    return { hasError: true };
  }

  //   componentDidCatch(error, errorInfo) {
  // 你可以将错误日志发送到服务器
  // console.error("Error caught by ErrorBoundary:", error, errorInfo);
  //   }

  render() {
    // 增加报错页面渲染页面
    if (this.state.hasError) {
      // 你可以渲染任意降级 UI
      return (
        <div>
          <Result
            style={{
              margin: "0px 20px ",
              borderRadius: 4,
              backgroundColor: "#fff",
            }}
            // status="error"
            status="500"
            icon={<CloseCircleOutlined />}
            title="页面错误,请联系管理员!"
            // extra={<Button type="primary">Next</Button>}
          />
        </div>
      );
    }

    return this.props.children;
  }
}

export default withRouter(ErrorBoundary);

3. 使用

import React from 'react';
import ErrorBoundary from './ErrorBoundary';
import MyComponent from './MyComponent';

function App() {
  return (
    <div>
      <h1>My Application</h1>
      {/* 使用 ErrorBoundary 包裹可能抛出错误的组件 */}
      <ErrorBoundary>
        <MyComponent />
      </ErrorBoundary>
    </div>
  );
}

export default App;

4. ErrorBoundary 的工作原理
在这里插入图片描述


http://www.kler.cn/a/454337.html

相关文章:

  • 【C语言练习(17)—输出杨辉三角形】
  • 【Rust自学】7.1. Package、Crate和定义Module
  • 记录一次前端绘画海报的过程及遇到的几个问题
  • 服务器上加入SFTP------(小白篇 1)
  • flink-1.16 table sql 消费 kafka 数据,指定时间戳位置消费数据报错:Invalid negative offset 问题解决
  • 编码转换(实例)
  • 贪心算法解决根据身高重建队列问题
  • .net framework wpf 打包免安装exe文件
  • leetcode hot100 环形链表
  • Redis 集群方案
  • 【Rust自学】7.2. 路径(Path)Pt.1:相对路径、绝对路径与pub关键字
  • Vue.js框架:在线教育系统的安全性与稳定性
  • k8s etcd 数据损坏处理方式
  • springboot使用自定义的线程池 完成 多线程执行网络请求,返回数据后,统一返回给前段
  • 计算机网络基础知识
  • vulnhub-matrix-breakout-2-morpheus
  • Rust : tokio中select!
  • 聊一聊 C#线程池 的线程动态注入
  • Flutter persistentFooterButtons控件详解
  • 【EI会议征稿】人工智能与遥感应用国际会议 (AIRSA 2025)
  • uniapp popup弹窗组件的自定义使用方法
  • Large Language Model based Multi-Agents: A Survey of Progress and Challenges
  • (补)算法刷题Day24: BM61 矩阵最长递增路径
  • 本地部署 LLaMA-Factory
  • 解决:excel鼠标滚动幅度太大如何调节?
  • (NIPS-2024)PISSA:大型语言模型的主奇异值和奇异向量适配