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