亚洲乱码中文字幕综合,中国熟女仑乱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)驗的同學,不會了解如此全面。

window.onerror

可以監(jiān)聽當前頁面所有的 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ù)雜的、有運行風險的組件,可使用 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 // 存儲當前的報錯信息
        }
    }
    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ù)不一樣?。。?/pre>

答案

  • 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.js中vue-property-decorator的使用方法詳解

    Vue.js中vue-property-decorator的使用方法詳解

    vue-property-decorator是一個用于在Vue.js中使用TypeScript裝飾器的庫,它能夠簡化 Vue 組件的定義,使代碼更加簡潔和可維護,它能夠簡化Vue組件的定義,使代碼更加簡潔和可維護,本文將深入探討vue-property-decorator的使用方法,并展示如何在Vue.js項目中應(yīng)用它
    2024-08-08
  • vue 路由視圖 router-view嵌套跳轉(zhuǎn)的實現(xiàn)

    vue 路由視圖 router-view嵌套跳轉(zhuǎn)的實現(xiàn)

    這篇文章主要介紹了vue 路由視圖 router-view嵌套跳轉(zhuǎn),主要實現(xiàn)的內(nèi)容有制作一個登錄頁面,跳轉(zhuǎn)到首頁,首頁包含菜單欄、頂部導(dǎo)航欄、主體,標準的后臺網(wǎng)頁格式,菜單點擊顯示不同的頁面,感興趣的小伙伴請參考下面文章內(nèi)容
    2021-09-09
  • Vue極簡生成器?Vuepress的實現(xiàn)

    Vue極簡生成器?Vuepress的實現(xiàn)

    本文主要介紹了Vue極簡生成器?Vuepress的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧<BR>
    2022-06-06
  • 遇到vue前端npm?i報錯多個版本不一致問題及解決

    遇到vue前端npm?i報錯多個版本不一致問題及解決

    這篇文章主要介紹了遇到vue前端npm?i報錯多個版本不一致問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue頁面中播放音頻文件的方法詳解

    Vue頁面中播放音頻文件的方法詳解

    這篇文章主要為大家詳細介紹了Vue實現(xiàn)頁面中播放音頻文件的相關(guān)方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-02-02
  • 在Vue當中同時配置多個路由文件的方法案例代碼

    在Vue當中同時配置多個路由文件的方法案例代碼

    這篇文章主要介紹了在Vue當中同時配置多個路由文件的方法,包含具體代碼,本文分步驟結(jié)合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • 解決vue打包后vendor.js文件過大問題

    解決vue打包后vendor.js文件過大問題

    這篇文章主要介紹了解決vue打包后vendor.js文件過大問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • 一文詳解Vue Router的使用和路由守衛(wèi)

    一文詳解Vue Router的使用和路由守衛(wèi)

    Vue Router 是 Vue.js 的官方路由庫,用于在 Vue 應(yīng)用中實現(xiàn)單頁面應(yīng)用(SPA)的客戶端路由,以下是 Vue Router 的詳細介紹,包括基本概念、配置、路由導(dǎo)航以及高級用法,感興趣的小伙伴跟著小編一起來看看吧
    2024-08-08
  • Animate.css在vue中的使用方式

    Animate.css在vue中的使用方式

    這篇文章主要介紹了Animate.css在vue中的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue 授權(quán)獲取微信openId操作

    vue 授權(quán)獲取微信openId操作

    這篇文章主要介紹了vue 授權(quán)獲取微信openId操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11

最新評論