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 編寫(xiě)代碼如下
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ò)的專(zhuān)門(mén)的界面 但在上線之后 客戶(hù)看到的就是一片空白
但我們想 因?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ò)誤的組件就寫(xiě)好了
然后 改寫(xiě) 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外面
然后 編寫(xiě) 當(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實(shí)現(xiàn)全局組件的Toast輕提示效果
這篇文章主要介紹了React實(shí)現(xiàn)全局組件的Toast輕提示效果,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
React使用有限狀態(tài)機(jī)的實(shí)現(xiàn)示例
本文主要介紹了React使用有限狀態(tài)機(jī)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
react router4+redux實(shí)現(xiàn)路由權(quán)限控制的方法
本篇文章主要介紹了react router4+redux實(shí)現(xiàn)路由權(quán)限控制的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
React?Native性能優(yōu)化紅寶書(shū)方案詳解
React?Native?是Facebook在React.js?Conf2015推出的開(kāi)源框架,使用React和應(yīng)用平臺(tái)的原生功能來(lái)構(gòu)建Android和iOS應(yīng)用,這篇文章主要介紹了React?Native性能優(yōu)化紅寶書(shū),需要的朋友可以參考下2024-06-06
詳解React中父子組件數(shù)據(jù)傳遞和修改的方式及原理
這篇文章主要為大家詳細(xì)介紹了React中父子組件數(shù)據(jù)傳遞和修改的方式及原理,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04
webpack4 + react 搭建多頁(yè)面應(yīng)用示例
這篇文章主要介紹了webpack4 + react 搭建多頁(yè)面應(yīng)用示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08

