React錯(cuò)誤邊界Error Boundaries
首先 我們先構(gòu)建出問(wèn)題的場(chǎng)景
我們創(chuàng)建一個(gè)react項(xiàng)目
然后在src下創(chuàng)建 components 文件夾目錄
在下面創(chuàng)建一個(gè) error.jsx 組件
參開(kāi)代碼如下
import React from "react";
export default class App extends React.Component{
constructor(props){
super(props);
this.state = {
}
}
render(){
return (
<div>
{ null.bingt }
</div>
)
}
}
這時(shí) 就會(huì)有人說(shuō)了 你這 null.bingt 不是擺明會(huì)報(bào)錯(cuò)嗎?
沒(méi)錯(cuò) 我們要的就是報(bào)錯(cuò)
找到src下的 App.js 編寫代碼如下
import './App.css';
import React from "react";
import Error from "./components/error";
export default class App extends React.Component{
constructor(props){
super(props);
this.state = {
}
}
render(){
return (
<div>
<span>你好</span>
<Error/>
</div>
)
}
}
運(yùn)行之后 控制臺(tái)直接報(bào)錯(cuò) 界面白屏 但其實(shí) App組件上還有個(gè)你好啊 說(shuō)明 整個(gè)項(xiàng)目都沒(méi)渲染出來(lái)

直接白屏 版本低一點(diǎn)的react還會(huì)出現(xiàn)報(bào)錯(cuò)的專門的界面 但在上線之后 客戶看到的就是一片空白
但我們想 因?yàn)橐粋€(gè)組件報(bào)錯(cuò) 導(dǎo)致整個(gè)項(xiàng)目都運(yùn)行不起來(lái) 這合理嗎?
顯然是不合理的
此時(shí) 我們可以在 components 目錄下創(chuàng)建 ErrorBoundary.jsx組件
參考代碼如下
import React from "react"
export default class ErrorBoundary extends React.Component{
state = {
hasError:false,
error:null,
errorInfo:null
}
componentDidCatch(error,errorInfo){
this.setState({
hasError:true,
error:error,
errorInfo:errorInfo
})
}
render(){
if(this.state.hasError){
return <div>{ this.props.render(this.state.error,this.state.errorInfo) }</div>
}
return this.props.children;
}
}
此時(shí) 我們的一個(gè)捕獲錯(cuò)誤的組件就寫好了
然后 改寫 src下的 App.js
代碼如下
import './App.css';
import React from "react";
import Error from "./components/error";
import ErrorBoundary from "./components/ErrorBoundary";
export default class App extends React.Component{
constructor(props){
super(props);
this.state = {
}
}
render(){
return (
<div>
<span>你好</span>
<ErrorBoundary render ={ (error,errorInfo) => <p>{ '加載時(shí)發(fā)生錯(cuò)誤' }</p>}>
<Error/>
</ErrorBoundary>
</div>
)
}
}
此時(shí) 我們將ErrorBoundary捕獲報(bào)錯(cuò)的組件 套在了Error外面
然后 編寫 當(dāng)報(bào)錯(cuò)時(shí) 就渲染
{ ‘加載時(shí)發(fā)生錯(cuò)誤’ }
運(yùn)行結(jié)果如下

控制臺(tái)依舊會(huì)輸出報(bào)錯(cuò)信息 但 將不會(huì)運(yùn)行到其他組件的渲染 而且 我們指定報(bào)錯(cuò)后 渲染的
{ ‘加載時(shí)發(fā)生錯(cuò)誤’ }
也成功渲染出來(lái)了
就是 之后我們指定可能某個(gè)組件 會(huì)報(bào)錯(cuò) 就可以用這個(gè)組件套一下 避免一個(gè)組件報(bào)錯(cuò) 整個(gè)項(xiàng)目白屏的情況
到此這篇關(guān)于React錯(cuò)誤邊界Error Boundaries的文章就介紹到這了,更多相關(guān)React錯(cuò)誤邊界內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
React手寫簽名組件react-signature實(shí)現(xiàn)簽字demo
這篇文章主要為大家介紹了React手寫簽名組件react-signature實(shí)現(xiàn)簽字demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
react進(jìn)階教程之異常處理機(jī)制error?Boundaries
在react中一旦出錯(cuò),如果每個(gè)組件去處理出錯(cuò)情況則比較麻煩,下面這篇文章主要給大家介紹了關(guān)于react進(jìn)階教程之異常處理機(jī)制error?Boundaries的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
字節(jié)封裝React組件手機(jī)號(hào)自動(dòng)校驗(yàn)格式FormItem
這篇文章主要為大家介紹了字節(jié)封裝React組件手機(jī)號(hào)自動(dòng)校驗(yàn)格式FormItem,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
React項(xiàng)目中服務(wù)器端渲染SSR的實(shí)現(xiàn)與優(yōu)化詳解
在傳統(tǒng)的 React 項(xiàng)目里,頁(yè)面的渲染工作是在瀏覽器里完成的,而服務(wù)器端渲染(SSR)則是讓服務(wù)器先把 React 組件渲染成 HTML 字符串,再把這個(gè) HTML 字符串發(fā)送給瀏覽器,下面我們就來(lái)看看具體實(shí)現(xiàn)方法吧2025-03-03
如何使用 React Native WebView 實(shí)現(xiàn) App&nb
通過(guò) react-native-webview,我們可以輕松實(shí)現(xiàn) App 與 Web 的雙向通訊,這種技術(shù)非常適合需要在移動(dòng)應(yīng)用中嵌入復(fù)雜網(wǎng)頁(yè)功能的場(chǎng)景,感興趣的朋友一起看看吧2024-12-12
create-react-app修改為多頁(yè)面支持的方法
本篇文章主要介紹了create-react-app修改為多頁(yè)面支持的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05

