React錯誤邊界Error Boundaries
首先 我們先構(gòu)建出問題的場景
我們創(chuàng)建一個react項(xiàng)目
然后在src下創(chuàng)建 components 文件夾目錄
在下面創(chuàng)建一個 error.jsx 組件
參開代碼如下
import React from "react"; export default class App extends React.Component{ constructor(props){ super(props); this.state = { } } render(){ return ( <div> { null.bingt } </div> ) } }
這時 就會有人說了 你這 null.bingt 不是擺明會報錯嗎?
沒錯 我們要的就是報錯
找到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)行之后 控制臺直接報錯 界面白屏 但其實(shí) App組件上還有個你好啊 說明 整個項(xiàng)目都沒渲染出來
直接白屏 版本低一點(diǎn)的react還會出現(xiàn)報錯的專門的界面 但在上線之后 客戶看到的就是一片空白
但我們想 因?yàn)橐粋€組件報錯 導(dǎo)致整個項(xiàng)目都運(yùn)行不起來 這合理嗎?
顯然是不合理的
此時 我們可以在 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; } }
此時 我們的一個捕獲錯誤的組件就寫好了
然后 改寫 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>{ '加載時發(fā)生錯誤' }</p>}> <Error/> </ErrorBoundary> </div> ) } }
此時 我們將ErrorBoundary捕獲報錯的組件 套在了Error外面
然后 編寫 當(dāng)報錯時 就渲染
{ ‘加載時發(fā)生錯誤’ }
運(yùn)行結(jié)果如下
控制臺依舊會輸出報錯信息 但 將不會運(yùn)行到其他組件的渲染 而且 我們指定報錯后 渲染的
{ ‘加載時發(fā)生錯誤’ }
也成功渲染出來了
就是 之后我們指定可能某個組件 會報錯 就可以用這個組件套一下 避免一個組件報錯 整個項(xiàng)目白屏的情況
到此這篇關(guān)于React錯誤邊界Error Boundaries的文章就介紹到這了,更多相關(guān)React錯誤邊界內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
React實(shí)現(xiàn)全局組件的Toast輕提示效果
這篇文章主要介紹了React實(shí)現(xiàn)全局組件的Toast輕提示效果,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09React使用有限狀態(tài)機(jī)的實(shí)現(xiàn)示例
本文主要介紹了React使用有限狀態(tài)機(jī)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05react router4+redux實(shí)現(xiàn)路由權(quán)限控制的方法
本篇文章主要介紹了react router4+redux實(shí)現(xiàn)路由權(quán)限控制的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05詳解React中父子組件數(shù)據(jù)傳遞和修改的方式及原理
這篇文章主要為大家詳細(xì)介紹了React中父子組件數(shù)據(jù)傳遞和修改的方式及原理,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04webpack4 + react 搭建多頁面應(yīng)用示例
這篇文章主要介紹了webpack4 + react 搭建多頁面應(yīng)用示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08