React錯誤邊界Error Boundaries詳解
錯誤邊界(Error Boundaries)
概述
- 部分 UI 的 JavaScript 錯誤不應(yīng)該導(dǎo)致整個應(yīng)用崩潰,為了解決這個問題,React 16 引入了一個新的概念 —— 錯誤邊界。
- 是React組件,可以捕獲并打印發(fā)生在其子組件樹任何位置的 JavaScript 錯誤,并且,它會渲染出備用 UI。錯誤邊界在渲染期間、生命周期方法和整個組件樹的構(gòu)造函數(shù)中捕獲錯誤。
- class組件中才可以使用
- 錯誤邊界僅可以捕獲其子組件的錯誤
錯誤邊界無法捕獲以下場景中的錯誤
- 事件處理
- 異步代碼
- 服務(wù)端渲染
- 它自身拋出來的錯誤(并非它的子組件)
渲染備用UI-static getDerivedStateFromError()
在class組件中使用 static getDerivedStateFromError() 可以渲染備用 UI
static getDerivedStateFromError(error){
// 更新 state 使下一次渲染能夠顯示降級后的 UI
return { hasError: true }
}
打印錯誤信息-componentDidCatch()
- 在class組件中使用 cpmponentDidCatch(err,errorInfo) 可以打印錯誤信息
- err:錯誤信息; errorInfo:它存儲哪個組件引發(fā)了此錯誤的componentStack跟蹤
componentDidCatch(error,errorInfo){
// 你同樣可以將錯誤日志上報給服務(wù)器
logErrorToMyService(error, errorInfo)
}
打印錯誤信息并渲染備用UI
class ErrorBoundary extends React.Component {
constructor(props){
super(props)
this.state = { hasError: false} //是否報錯
}
static getDeriveStateFromError(error){
// 更新 state 使下一次渲染能夠顯示降級后的 UI
return { hasError: true }
}
componentDidCatch(error,errorInfo){
// 你同樣可以將錯誤日志上報給服務(wù)器
logErrorToMyService(error, errorInfo)
}
render(){
if(this.state.hasError){
// 自定義降級后的 UI 并渲染
return <h1>Something went wrong.</h1>;
}
return this.props.children;
}
}
可以將錯誤邊界封裝為一個組件進(jìn)行使用
<ErrorBoundary>
<MyWidget />
</ErrorBoundary>
//項目中可以用于包裹在路由外面
<ErrorBoundary>
<Suspense fallback={<div >Loading...</div>}>
...
<MyWidget />
</Suspense>
</ErrorBoundary>
錯誤邊界的工作方式類似于 JavaScript 的 catch {},不同的地方在于錯誤邊界只針對 React 的class 組件。
錯誤邊界應(yīng)該放置在哪?
可以選在最頂層的路由組件并為用戶展示一個錯誤信息
未捕獲錯誤(Uncaught Errors)的新行為
自 React 16 起,任何未被錯誤邊界捕獲的錯誤將會導(dǎo)致整個 React 組件樹被卸載。
到此這篇關(guān)于React錯誤邊界Error Boundaries詳解的文章就介紹到這了,更多相關(guān)React錯誤邊界內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
flouting?ui定位組件完美替代ant?deisgn使用詳解
這篇文章主要為大家介紹了flouting?ui定位組件完美替代ant?deisgn使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
react.js 父子組件數(shù)據(jù)綁定實(shí)時通訊的示例代碼
本篇文章主要介紹了react.js 父子組件數(shù)據(jù)綁定實(shí)時通訊的示例代碼,2017-09-09
React語法中設(shè)置TS校驗(yàn)規(guī)則的步驟詳解
這篇文章主要給大家介紹了React語法中如何設(shè)置TS校驗(yàn)規(guī)則,文中有詳細(xì)的代碼示例供大家參考,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-10-10
React?中使用?RxJS?優(yōu)化數(shù)據(jù)流的處理方案
這篇文章主要為大家介紹了React?中使用?RxJS?優(yōu)化數(shù)據(jù)流的處理方案示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
React?Hooks使用startTransition與useTransition教程示例
這篇文章主要為大家介紹了React?Hooks使用startTransition與useTransition教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
TS裝飾器bindThis優(yōu)雅實(shí)現(xiàn)React類組件中this綁定
這篇文章主要為大家介紹了TS裝飾器bindThis優(yōu)雅實(shí)現(xiàn)React類組件中this綁定,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11

