亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

前端項目中的Vue、React錯誤監(jiān)聽

 更新時間:2022年04月22日 11:33:10   作者:??服部????  
這篇文章主要介紹了前端項目中的Vue、React錯誤監(jiān)聽,文章圍繞主題的相關(guān)資料展開詳細內(nèi)容介紹需要的小伙伴可以參考一下

一、 Vue 錯誤監(jiān)聽

題目:

如何統(tǒng)一監(jiān)聽 Vue 組件報錯?

分析:

真實項目需要閉環(huán),即考慮各個方面,除了基本的功能外,還要考慮性能優(yōu)化、報錯、統(tǒng)計等。 而個人項目、課程項目一般以實現(xiàn)功能為主,不會考慮這么全面。所以,沒有實際工作經(jīng)驗的同學(xué),不會了解如此全面。

window.onerror

可以監(jiān)聽當(dāng)前頁面所有的 JS 報錯,jQuery 時代經(jīng)常用。
注意,全局只綁定一次即可。不要放在多次渲染的組件中,這樣容易綁定多次。

window.onerror = function(msg, source, line, column, error) {
    console.log('window.onerror---------', msg, source, line, column, error)
}
// 注意,如果用 window.addEventListener('error', event => {}) 參數(shù)不一樣?。?!

errorCaptured 生命周期

會監(jiān)聽所有下級組件的錯誤??梢苑祷?nbsp;false 阻止向上傳播,因為可能會有多個上級節(jié)點都監(jiān)聽錯誤。

errorCaptured(error, instance, info) {
    console.log('errorCaptured--------', error, instance, info)
}

errorHandler

全局的錯誤監(jiān)聽,所有組件的報錯都會匯總到這里來。PS:如果 errorCaptured 返回 false 則不會到這里。

const app = createApp(App)
app.config.errorHandler = (error, instance, info) => {
    console.log('errorHandler--------', error, instance, info)
}

請注意,errorHandler 會阻止錯誤走向 window.onerror

PS:還有 warnHandler

異步錯誤

組件內(nèi)的異步錯誤 errorHandler 監(jiān)聽不到,還是需要 window.onerror

mounted() {
    setTimeout(() => {
        throw new Error('setTimeout 報錯')
    }, 1000)
},

答案

方式

  • errorCaptured 監(jiān)聽下級組件的錯誤,可返回 false 阻止向上傳播
  • errorHandler 監(jiān)聽 Vue 全局錯誤
  • window.onerror 監(jiān)聽其他的 JS 錯誤,如異步

建議:結(jié)合使用

  • 一些重要的、復(fù)雜的、有運行風(fēng)險的組件,可使用 errorCaptured 重點監(jiān)聽
  • 然后用 errorHandler window.onerror 候補全局監(jiān)聽,避免意外情況

擴展

Promise 監(jiān)聽報錯要使用 window.onunhandledrejection

前端拿到錯誤監(jiān)聽之后,需要傳遞給服務(wù)端,進行錯誤收集和分析,然后修復(fù) bug 。 后面會有一道面試題專門講解。

二、React 錯誤監(jiān)聽

題目:

如何統(tǒng)一監(jiān)聽 React 組件報錯?

分析:

真實項目需要閉環(huán),即考慮各個方面,除了基本的功能外,還要考慮性能優(yōu)化、報錯、統(tǒng)計等。

ErrorBoundary

React 16+ 引入??梢员O(jiān)聽所有下級組件報錯,同時降級展示 UI 。
代碼參考 ErrorBoundary.js 和 components/ErrorDemo

import React from 'react'

class ErrorBoundary extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            error: null // 存儲當(dāng)前的報錯信息
        }
    }
    static getDerivedStateFromError(error) {
        // 更新 state 使下一次渲染能夠顯示降級后的 UI
        console.info('getDerivedStateFromError...', error)
        return { error }
    }
    componentDidCatch(error, errorInfo) {
        // 統(tǒng)計上報錯誤信息
        console.info('componentDidCatch...', error, errorInfo)
    }
    render() {
        if (this.state.error) {
            // 提示錯誤
            return <h1>報錯了</h1>
        }

        // 沒有錯誤,就渲染子組件
        return this.props.children
    }
}

export default ErrorBoundary

FunctionalDemo.js

import { useState, useEffect } from 'react'

function ErrorDemo() {
    const [num] = useState(100)

    function clickHandler() {
        num() // ErrorBoundary 無法監(jiān)聽事件報錯,需要自行 try-catch
    }

    useEffect(() => {
        // throw new Error('mounted error') // ErrorBoundary 可監(jiān)聽渲染過程的報錯
    }, [])

    return <div>
        <p>error demo - functional</p>
        <button onClick={clickHandler}>error</button>
    </div>
}

export default ErrorDemo

建議應(yīng)用到最頂層,監(jiān)聽全局錯誤

// index.js 入口文件
ReactDOM.render(
  <React.StrictMode>
    <ErrorBoundary>
      <App />
    </ErrorBoundary>
  </React.StrictMode>,
  document.getElementById('root')
);

函數(shù)組件中也可以使用

function App(props) {
    return <ErrorBoundary>
        {props.children}
    </ErrorBoundary>
}

dev 和 build

dev 環(huán)境下無法看到 ErrorBoundary 的報錯 UI 效果。會顯示的提示報錯信息。
yarn build 之后再運行,即可看到 UI 效果。

事件報錯

React 不需要 ErrorBoundary 來捕獲事件處理器中的錯誤。與 render 方法和生命周期方法不同,事件處理器不會在渲染期間觸發(fā)。

如果你需要在事件處理器內(nèi)部捕獲錯誤,使用普通的 try-catch 語句。也可以使用全局的 window.onerror 來監(jiān)聽。

異步錯誤

ErrorBoundary 無法捕捉到異步報錯,可使用 window.onerror 來監(jiān)聽。

window.onerror = function(msg, source, line, column, error) {
    console.log('window.onerror---------', msg, source, line, column, error)
}
// 注意,如果用 window.addEventListener('error', event => {}) 參數(shù)不一樣?。?!

答案

  • ErrorBoundary 監(jiān)聽渲染時報錯
  • try-catch 和 window.onerror 捕獲其他錯誤

擴展

Promise 監(jiān)聽報錯要使用 window.onunhandledrejection

前端拿到錯誤監(jiān)聽之后,需要傳遞給服務(wù)端,進行錯誤收集和分析,然后修復(fù) bug 。

到此這篇關(guān)于前端項目中的Vue、React錯誤監(jiān)聽的文章就介紹到這了,更多相關(guān)Vue,React錯誤監(jiān)聽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue echarts畫甘特圖流程詳細講解

    Vue echarts畫甘特圖流程詳細講解

    這篇文章主要介紹了Vue echarts畫甘特圖流程,甘特圖(Gantt chart)又稱為橫道圖、條狀圖(Bar chart)。其通過條狀圖來顯示項目、進度和其他時間相關(guān)的系統(tǒng)進展的內(nèi)在關(guān)系隨著時間進展的情況
    2022-09-09
  • 使用vue-aplayer插件時出現(xiàn)的問題的解決

    使用vue-aplayer插件時出現(xiàn)的問題的解決

    這篇文章主要介紹了使用vue-aplayer插件時出現(xiàn)的問題的解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 一文詳解Vue中的虛擬DOM與Diff算法

    一文詳解Vue中的虛擬DOM與Diff算法

    vue中的diff算法時常是面試過程中的考點,本文將為大家講解何為diff以及diff算法的實現(xiàn)過程,那么在了解diff之前,我們需要先了解虛擬DOM是什么,需要的朋友可以參考下
    2024-02-02
  • 深入詳解Vue3 ref底層實現(xiàn)原理

    深入詳解Vue3 ref底層實現(xiàn)原理

    隨著現(xiàn)在vue3越來越普及,相應(yīng)的面試題也多了起來。說到vue3的面試題,有一個最經(jīng)典的就是對于實現(xiàn)ref和reactive這兩個方法的底層原理,本文就來和大家簡單講講吧
    2023-04-04
  • vue3引入Element-plus的詳細步驟記錄

    vue3引入Element-plus的詳細步驟記錄

    Element Plus是為適配Vue3而對Element UI進行重構(gòu)后產(chǎn)生的前端組件庫,包含豐富的基礎(chǔ)組件,下面這篇文章主要給大家介紹了關(guān)于vue3引入Element-plus的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 深入理解vue2.0路由如何配置問題

    深入理解vue2.0路由如何配置問題

    本篇文章主要介紹了vue2.0路由配置問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Vue.js項目實戰(zhàn)之多語種網(wǎng)站的功能實現(xiàn)(租車)

    Vue.js項目實戰(zhàn)之多語種網(wǎng)站的功能實現(xiàn)(租車)

    這篇文章主要介紹了Vue.js項目實戰(zhàn)之多語種網(wǎng)站(租車)的功能實現(xiàn) ,需要的朋友可以參考下
    2019-08-08
  • vue中自定義指令(directive)的基本使用方法

    vue中自定義指令(directive)的基本使用方法

    Vue中內(nèi)置了很多的指令,但有時候這些指令并不能滿足我們,或者說我們想為元素附加一些特別的功能,這時候我們就需要用到vue中一個很強大的功能了—自定義指令,這篇文章主要給大家介紹了關(guān)于vue中自定義指令(directive)的基本使用方法,需要的朋友可以參考下
    2021-09-09
  • IE11下處理Promise及Vue的單項數(shù)據(jù)流問題

    IE11下處理Promise及Vue的單項數(shù)據(jù)流問題

    最近我開發(fā)的公司的競賽網(wǎng)站被發(fā)現(xiàn)在IE11下排行榜無數(shù)據(jù),但是在其他瀏覽器沒問題,我然后打開控制臺一看,發(fā)現(xiàn)有問題,糾結(jié)了半天才搗騰好,下面小編把方案分享處理,供大家選擇
    2019-07-07
  • vue.set向?qū)ο罄镌黾佣鄬訑?shù)組屬性不生效問題及解決

    vue.set向?qū)ο罄镌黾佣鄬訑?shù)組屬性不生效問題及解決

    這篇文章主要介紹了vue.set向?qū)ο罄镌黾佣鄬訑?shù)組屬性不生效問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評論