最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React?錯(cuò)誤邊界Error?Boundary使用示例解析

 更新時(shí)間:2022年09月19日 10:24:38   作者:凌辰亦夢(mèng)  
這篇文章主要為大家介紹了React?錯(cuò)誤邊界Error?Boundary使用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

我們?yōu)槭裁葱枰e(cuò)誤邊界

在React組件中可能會(huì)由于某些JavaScript錯(cuò)誤,導(dǎo)致一些無法追蹤的錯(cuò)誤,導(dǎo)致應(yīng)用崩潰。部分 UI 的 JavaScript 錯(cuò)誤不應(yīng)該導(dǎo)致整個(gè)應(yīng)用崩潰。為此,React引入了錯(cuò)誤邊界(Error Boundary)的概念:可以捕獲發(fā)生在其子組件樹任何位置的 JavaScript 錯(cuò)誤,并打印這些錯(cuò)誤,同時(shí)展示降級(jí) UI,而并不會(huì)渲染那些發(fā)生崩潰的子組件樹。

而在React16以后,未捕獲的錯(cuò)誤會(huì)導(dǎo)致React組件樹的卸載,也就是白屏。所以某些情況下還是非常需要使用Error Boundary組件來避免這種比較嚴(yán)重的問題。

如何使用錯(cuò)誤邊界組件

按照React官方的約定,一個(gè)類組件定義了static getDerivedStateFromError()componentDidCatch() 這兩個(gè)生命周期函數(shù)中的任意一個(gè)(或兩個(gè)),即可被稱作ErrorBoundary組件,實(shí)現(xiàn)錯(cuò)誤邊界的功能。

其中,getDerivedStateFromError方法被約定為渲染備用UI,componentDidCatch方法被約定為捕獲打印錯(cuò)誤信息。

具體的實(shí)現(xiàn)如下:

//ErrorBoundary.tsx
import * as React from 'react';
interface PropsType {
    children: React.ReactNode;
}
interface StateType {
    hasError: boolean,
    Error?: null | Error,
    ErrorInfo?: null | React.ErrorInfo,
}
export class ErrorBoundary extends React.Component<PropsType, StateType> {
    constructor(props: PropsType) {
        super(props);
        this.state = {
            hasError: false,
            Error: null,
            ErrorInfo: null
        };
    }
    //控制渲染降級(jí)UI
    static getDerivedStateFromError(error: Error): StateType {
        return {hasError: true};
    }
    //捕獲拋出異常
    componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {
        //傳遞異常信息
        this.setState((preState) => 
            ({hasError: preState.hasError, Error: error, ErrorInfo: errorInfo})
        );
                //可以將異常信息拋出給日志系統(tǒng)等等
                //do something....
    }
    render() {
        //如果捕獲到異常,渲染降級(jí)UI
        if (this.state.hasError) {
            return <div>
                <h1>{`Error:${this.state.Error?.message}`}</h1>
                <details style={{whiteSpace: 'pre-wrap'}}>
                    {this.state.ErrorInfo?.componentStack}
                </details>
            </div>;
        }
        return this.props.children;
    }
}

實(shí)現(xiàn)ErrorBoundary組件后,我們只需要將其當(dāng)作常規(guī)組件使用,將其需要捕獲的組件放入其中即可。

使用方式如下:

//main.tsx
import ReactDOM from 'react-dom/client';
import {ErrorBoundary} from './ErrorBoundary.jsx';
ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
    <ErrorBoundary>
        <App/>
    </ErrorBoundary>
);
//app.tsx
import * as React from 'react';
function App() {
    const [count, setCount] = useState(0);
    if (count>0){
        throw new Error('count>0!');
    }
    return (
        <div>
            <button onClick={() => setCount((count) => count + 1)}>
                count is {count}
            </button>
        </div>
    );
}
export default App;

點(diǎn)擊按鈕后即可展示拋出異常時(shí),應(yīng)該渲染的降級(jí)UI:

使用錯(cuò)誤邊界需要注意什么

沒有什么技術(shù)?;蛘呒夹g(shù)思維是銀彈,錯(cuò)誤邊界看起來用得很爽,但是需要注意以下幾點(diǎn):

  • 錯(cuò)誤邊界實(shí)際上是用來捕獲render階段時(shí)拋出的異常,而React事件處理器中的錯(cuò)誤并不會(huì)渲染過程中被觸發(fā),所以錯(cuò)誤邊界捕獲不到事件處理器中的錯(cuò)誤。
  • React官方推薦使用try/catch來自行處理事件處理器中的異常。
  • 錯(cuò)誤邊界無法捕獲異步代碼中的錯(cuò)誤(例如 setTimeout或 requestAnimationFrame回調(diào)函數(shù)),這兩個(gè)函數(shù)中的代碼通常不在當(dāng)前任務(wù)隊(duì)列內(nèi)執(zhí)行。
  • 目前錯(cuò)誤邊界只能在類組件中實(shí)現(xiàn),也只能捕獲其子組件樹的錯(cuò)誤信息。錯(cuò)誤邊界無法捕獲自身的錯(cuò)誤,如果一個(gè)錯(cuò)誤邊界無法渲染錯(cuò)誤信息,則錯(cuò)誤會(huì)冒泡至最近的上層錯(cuò)誤邊界,類似于JavaScript中的cantch的工作機(jī)制。
  • 錯(cuò)誤邊界無法在服務(wù)端渲染中生效,因?yàn)楦镜匿秩痉椒ㄒ呀?jīng)ReactDOM.createRoot().render()修改為了ReactDOM.hydrateRoot(), 而上面也提到了,錯(cuò)誤邊界捕獲的是render階段時(shí)拋出的異常。

以上就是React 錯(cuò)誤邊界Error Boundary使用示例解析的詳細(xì)內(nèi)容,更多關(guān)于React 錯(cuò)誤邊界的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • React-Native做一個(gè)文本輸入框組件的實(shí)現(xiàn)代碼

    React-Native做一個(gè)文本輸入框組件的實(shí)現(xiàn)代碼

    這篇文章主要介紹了React-Native做一個(gè)文本輸入框組件的實(shí)現(xiàn)代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-08-08
  • react:swr接口緩存案例代碼

    react:swr接口緩存案例代碼

    useSWR 是一個(gè) React Hooks,是 HTTP 緩存庫(kù) SWR 的核心方法之一,SWR 是一個(gè)輕量級(jí)的 React Hooks 庫(kù),通過自動(dòng)緩存數(shù)據(jù)來實(shí)現(xiàn) React 的數(shù)據(jù)獲取,本文給大家介紹react:swr接口緩存案例詳解,感興趣的朋友一起看看吧
    2023-11-11
  • 無廢話快速上手React路由開發(fā)

    無廢話快速上手React路由開發(fā)

    本文以簡(jiǎn)潔為目標(biāo),幫助快速上手react-router-dom默認(rèn)你接觸過路由相關(guān)的開發(fā),通過實(shí)例代碼講解的很詳細(xì),對(duì)React路由相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-05-05
  • 基于React實(shí)現(xiàn)一個(gè)todo打勾效果

    基于React實(shí)現(xiàn)一個(gè)todo打勾效果

    這篇文章主要為大家詳細(xì)介紹了如何基于React實(shí)現(xiàn)一個(gè)todo打勾效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • react PropTypes校驗(yàn)傳遞的值操作示例

    react PropTypes校驗(yàn)傳遞的值操作示例

    這篇文章主要介紹了react PropTypes校驗(yàn)傳遞的值操作,結(jié)合實(shí)例形式分析了react PropTypes針對(duì)傳遞的值進(jìn)行校驗(yàn)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2020-04-04
  • React中嵌套組件與被嵌套組件的通信過程

    React中嵌套組件與被嵌套組件的通信過程

    這篇文章主要介紹了React中嵌套組件與被嵌套組件的通信過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • React解析html 標(biāo)簽的方法

    React解析html 標(biāo)簽的方法

    在React中,解析HTML標(biāo)簽通常是使用JSX(JavaScript XML)語法的一部分,這篇文章主要介紹了React 用來解析html 標(biāo)簽的方法,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • Redis數(shù)據(jù)結(jié)構(gòu)面試高頻問題解析

    Redis數(shù)據(jù)結(jié)構(gòu)面試高頻問題解析

    這篇文章主要為大家介紹了Redis數(shù)據(jù)結(jié)構(gòu)高頻面試問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 淺談React中組件間抽象

    淺談React中組件間抽象

    這篇文章主要介紹了淺談React中組件間抽象,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • Redux模塊化拆分reducer函數(shù)流程介紹

    Redux模塊化拆分reducer函數(shù)流程介紹

    Reducer是個(gè)純函數(shù),即只要傳入相同的參數(shù),每次都應(yīng)返回相同的結(jié)果。不要把和處理數(shù)據(jù)無關(guān)的代碼放在Reducer里,讓Reducer保持純凈,只是單純地執(zhí)行計(jì)算,這篇文章主要介紹了Redux拆分reducer函數(shù)流程
    2022-09-09

最新評(píng)論

青冈县| 肇源县| 建宁县| 广州市| 锦州市| 横山县| 东莞市| 扬中市| 理塘县| 福海县| 汝南县| 独山县| 无极县| 乐亭县| 南投市| 怀来县| 报价| 泰和县| 泗水县| 乌鲁木齐县| 休宁县| 永川市| 乌兰浩特市| 乌鲁木齐县| 铁岭县| 江都市| 加查县| 松江区| 甘泉县| 扶沟县| 金昌市| 深圳市| 运城市| 威远县| 泰来县| 平山县| 莱州市| 雷山县| 丰台区| 中牟县| 永寿县|