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
英文地址,請注明出處:http://en.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;為行業樹立了合規標桿。 一、無…