React中的ErrorBoundary

文章目录

  • 前言
    • ✅ 一、使用类组件实现 ErrorBoundary(官方推荐方式)
      • 用法示例:
    • ✅ 二、用函数组件实现 ErrorBoundary(借助 Hook + `react-error-boundary` 库)
      • 1. 安装 `react-error-boundary`
      • 2. 使用 `ErrorBoundary` 组件(函数方式)
    • ✅ 三、手写 Hook 模拟捕获运行时异常(局限性较大)
    • ✅ 总结对比


前言

在 React 中,ErrorBoundary(错误边界)用于捕获子组件在 渲染期间生命周期方法中构造函数中 发生的错误,防止整个应用崩溃。

React 目前官方只支持使用 类组件 实现 ErrorBoundary,但你也可以使用 第三方库 或自定义 Hook 来用函数组件实现类似功能。


✅ 一、使用类组件实现 ErrorBoundary(官方推荐方式)

import React from 'react'type Props = {fallback: React.ReactNodechildren: React.ReactNode
}type State = {hasError: boolean
}class ErrorBoundary extends React.Component<Props, State> {state: State = { hasError: false }static getDerivedStateFromError(_: Error): State {return { hasError: true }}componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {console.error('Error caught by ErrorBoundary:', error, errorInfo)}render() {if (this.state.hasError) {return this.props.fallback}return this.props.children}
}export default ErrorBoundary

用法示例:

<ErrorBoundary fallback={<h2>Something went wrong.</h2>}><MyComponent />
</ErrorBoundary>

✅ 二、用函数组件实现 ErrorBoundary(借助 Hook + react-error-boundary 库)

React 本身不支持函数组件方式的 Error Boundary(因为没有生命周期 componentDidCatch),但我们可以借助 第三方库

1. 安装 react-error-boundary

npm install react-error-boundary

2. 使用 ErrorBoundary 组件(函数方式)

import { ErrorBoundary } from 'react-error-boundary'function ErrorFallback({ error }: { error: Error }) {return (<div role="alert"><p>Something went wrong:</p><pre>{error.message}</pre></div>)
}function App() {return (<ErrorBoundary FallbackComponent={ErrorFallback}><DangerousComponent /></ErrorBoundary>)
}

✅ 三、手写 Hook 模拟捕获运行时异常(局限性较大)

只能用于捕获异步或事件中的异常,不能替代 ErrorBoundary 对渲染错误的捕获能力

function useSafeExecute(callback: () => void) {try {callback()} catch (e) {console.error('Caught error in hook:', e)}
}

✅ 总结对比

方法支持渲染错误类型是否推荐
类组件 ErrorBoundary官方支持✅ 推荐
函数组件 + react-error-boundary第三方支持✅ 推荐
自己写 hook try/catch 包装非正式⚠️ 仅限逻辑错误

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86481.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

历年西北工业大学计算机保研上机真题

西北工业大学计算机保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/problem 海伦公式求面积 题目描述 给定三角形的三条边长 a a a, b b b, c c c&#xff0c;先判断这三条边是否能构成一个三角形。 如果不能构成三角形&#xff0c;输出 N a N NaN NaN&#…

扫地机产品认证--黑名单制裁公司能否拿到美国产品准入许可(FCC认证)

扫地机产品认证–黑名单制裁公司能否拿到美国产品准入许可(FCC认证) 文章目录 扫地机产品认证--黑名单制裁公司能否拿到美国产品准入许可(FCC认证)⚠️ **一、核心限制规则**📋 **二、企业需满足的额外条件**🛡️ **三、黑名单企业的应对可能性**💎 **四、总结**产品认证…

数据结构复习2

第二章 线性表 2.1线性表的定义和基本操作 线性表&#xff1a;一种逻辑结构&#xff0c;表示数据元素之间的一对一线性关系&#xff08;如数组、链表、栈、队列等&#xff09;。 2.1.1线性表的定义 线性表是具有相同数据类型的n(n>0)个数据元素的有限序列。 (其中n为表长…

空间转录组benchmark 相关 读完scGPT spatial 和 空间单细胞基因乳房细胞数据集文章之后

文章目录 ✅ 空间转录组测序方式总体划分&#x1f9ec; 成像型空间转录组&#xff08;Imaging-based ST&#xff09;原理&#xff1a;技术代表 & 特点&#xff1a;优点&#xff1a;局限&#xff1a; &#x1f9ec; 测序型空间转录组&#xff08;Sequencing-based ST&#x…

清理华为云服务器内存使用率

这里写自定义目录标题 一、正确终止进程&#xff1a;不要带尖括号二、看清楚谁“真吃”了内存三、临时清掉缓存&#xff08;谨慎用&#xff09;四、长期优化1. 给系统加个 Swap2. 调整 MySQL 内存配置3. 水平&#xff0f;垂直扩容4. 告警 总结与下一步 华为云的“内存使用率”默…

Go 语言中的 package 和 go modules

1、package 的定义和导入 在任何大型软件项目中&#xff0c;代码的组织和管理都是至关重要的。Go 语言通过 包&#xff08;Package&#xff09; 的概念来解决这个问题&#xff0c;它不仅是代码组织的基础&#xff0c;也是代码复用的关键。本文将深入探讨 Go 语言中包的定义、规…

C#语言入门-task4 :C#语言的高级应用

C# 作为一门现代化、面向对象的编程语言&#xff0c;在企业级应用、游戏开发、移动应用、云计算等领域有着广泛的应用。以下是 C# 语言的一些高级应用场景和技术方向&#xff1a; 一、高级语言特性与编程范式 1. 异步编程&#xff08;Async/Await&#xff09; 应用场景&…

FastAPI vs Flask vs Django:Python Web框架全面对比

Python 作为最受欢迎的编程语言之一&#xff0c;其 Web 开发生态极为丰富。FastAPI、Flask 和 Django 是当前主流的三大 Python Web 框架&#xff0c;各有千秋。本文将从架构设计、开发效率、性能表现、生态支持、适用场景等方面&#xff0c;全面对比这三大框架&#xff0c;帮助…

如何从零开始掌握Pandas的DataFrame使用

视频演示 如何通过实例学习Pandas DataFrame的创建与数据访问 &#x1f9e9; 理解 Pandas DataFrame&#xff1a;数据分析的核心结构 Pandas 是 Python 中用于数据分析与处理的主力库&#xff0c;而 DataFrame 是 Pandas 最常用的二维表格数据结构。我们可以将其想象成一个 Ex…

LaTeX下载与实践入门指南

LaTeX下载与实践入门指南 简单来说&#xff0c;LaTeX 是一种以代码驱动的排版系统。和 Word 那种所见即所得&#xff08;WYSIWYG&#xff09;的编辑方式不同&#xff0c;LaTeX 更像是你写代码、它帮你生成精美排版。你写的不是文字排版&#xff0c;而是一种“结构化内容&#…

Java--数组

目录 1.1 介绍&#xff1a;数据可以存放多个同一类型的数据。 1.2 排序&#xff1a; 冒泡排序法&#xff1a; 1.3 查找 1. 顺序查找 2. 二分查找 二维数组&#xff1a; 杨辉三角&#xff1a; 1.1 介绍&#xff1a;数据可以存放多个同一类型的数据。 数组的引用&#xf…

地址簇与数据序列

深入理解IP地址与端口号&#xff1a;网络通信的基础 IP地址&#xff1a;互联网的门牌号 IP地址&#xff08;Internet Protocol Address&#xff09;是分配给网络中每台设备的唯一标识符&#xff0c;就像现实世界中的门牌号一样。在计算机上&#xff0c;一个网卡对应一个IP地址…

中学数集相等概念凸显无穷集不可~其真子集——初数一直将不是N的真子集误为⊂N

中学数集相等概念凸显无穷集不可&#xff5e;其真子集——初数一直将不是N的真子集误为⊂N 黄小宁 [摘要]证明了初等数学应有几何起码常识&#xff1a;当且仅当平移的距离0时才能使平移前、后的点集&#xff08;元点不少于两个&#xff09;重合。从而表明初中的直线公理使中学…

常规层叠设计需要了解的板材知识

常规层叠设计需要了解的板材知识: 层叠设计的第一个关键要点就是要了解板材的基本知识。 观点: PCB是由铜箔(“皮”)、树脂(“筋”)、玻璃纤维布及其他功能性补强添加物(“骨”)组成。层叠设计时&#xff0c;要对“筋骨皮”的材料特性参数有一定了解。 先来看看“皮”,在对常…

Zabbix 监控VMware Vcenter

本次实验测试如何在Zabbix中添加Vcenter监控对象实现对VMware虚拟化平台的监控。 一、测试环境 1、Zabbix服务器配置&#xff1a; Zabbix 版本: Zabbix 7.0.11 LTS 操作系统: Ubuntu 24.04 数据库: MySQL 8 Web 服务器: Apache IP&#xff1a;192.168.1.242 2、监控目标…

链表最终章——双向链表及其应用

———————————本文旨在交流探讨计算机知识&#xff0c;欢迎交流指正———————————— 上一章&#xff0c;我们介绍了链表的循环扩展&#xff0c;但是&#xff0c;单向链表毕竟是单向查询的&#xff0c;就算是经过循环来查找&#xff0c;终究是效率偏低&#x…

智能体的5个核心要素

文章目录 如何看待智能体智能体的发展阶段国内大模型厂家推出的智能体智能体的应用领域智能体架构智能体的核心要素1. ​​认知中枢&#xff08;大模型&#xff09;​​&#x1f9e0; 2. ​​记忆系统&#xff08;Memory&#xff09;​​&#x1f6e0;️ 3. ​​规划与决策&…

QUdpScoket 组播实现及其中的踩坑点记录

QUdpScoket 组播实现及其中的踩坑点记录 QUdpSocket要想组播需要打开MulticastTtlOption配置项&#xff0c;否则无法生效&#xff0c;亲身踩坑经历 m_socketnew QUdpSocket(this);m_socket->setSocketOption(QAbstractSocket::MulticastTtlOption,1);确定一个组播地址&…

250627-结合Guacamole与FRP访问CentOS-Stream-9及Windows10

A. FRP的配置 A.1 FRP在CentOS中的配置 frps.toml [common] bind_port 7000 bind_addr 0.0.0.0dashboard_port 7500 dashboard_user admin dashboard_pwd admin启动&#xff1a;./frps -c frps.toml frpc.toml [common] server_addr 123.456.789.98 server_port 700…

环保法规下的十六层线路板创新:猎板 PCB 如何实现无铅化与可持续制造

在全球环保法规趋严的背景下&#xff0c;十六层线路板作为高端电子设备的核心组件&#xff0c;正面临无铅化与可持续制造的双重挑战。猎板 PCB 凭借材料革新与工艺升级&#xff0c;构建了从焊料到基材、从生产到回收的全链路绿色体系&#xff0c;为行业树立了合规标杆。 一、无…