广告
返回顶部
首页 > 资讯 > 精选 >前端项目中的Vue、React错误监听怎么实现
  • 331
分享到

前端项目中的Vue、React错误监听怎么实现

2023-06-30 08:06:34 331人浏览 安东尼
摘要

本篇内容介绍了“前端项目中的Vue、React错误监听怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、 Vue 错误监听题目:如何

本篇内容介绍了“前端项目中的VueReact错误监听怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、 Vue 错误监听

题目:

如何统一监听 Vue 组件报错?

分析:

真实项目需要闭环,即考虑各个方面,除了基本的功能外,还要考虑性能优化、报错、统计等。 而个人项目、课程项目一般以实现功能为主,不会考虑这么全面。所以,没有实际工作经验的同学,不会了解如此全面。

window.onerror

可以监听当前页面所有的 js 报错,Jquery 时代经常用。
注意,全局只绑定一次即可。不要放在多次渲染的组件中,这样容易绑定多次。

window.onerror = function(msg, source, line, column, error) {    console.log('window.onerror---------', msg, source, line, column, error)}// 注意,如果用 window.addEventListener('error', event => {}) 参数不一样!!!

errorCaptured 生命周期

会监听所有下级组件的错误。可以返回 false 阻止向上传播,因为可能会有多个上级节点都监听错误。

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

errorHandler

全局的错误监听,所有组件的报错都会汇总到这里来。PS:如果 errorCaptured 返回 false 则不会到这里。

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

请注意,errorHandler 会阻止错误走向 window.onerror

PS:还有 warnHandler

异步错误

组件内的异步错误 errorHandler 监听不到,还是需要 window.onerror

mounted() {    setTimeout(() => {        throw new Error('setTimeout 报错')    }, 1000)},

答案

方式

  • errorCaptured 监听下级组件的错误,可返回 false 阻止向上传播

  • errorHandler 监听 Vue 全局错误

  • window.onerror 监听其他的 JS 错误,如异步

建议:结合使用

  • 一些重要的、复杂的、有运行风险的组件,可使用 errorCaptured 重点监听

  • 然后用 errorHandler window.onerror 候补全局监听,避免意外情况

扩展

Promise 监听报错要使用 window.onunhandledrejection

前端拿到错误监听之后,需要传递给服务端,进行错误收集和分析,然后修复 bug 。 后面会有一道面试题专门讲解。

二、React 错误监听

题目:

如何统一监听 React 组件报错?

分析:

真实项目需要闭环,即考虑各个方面,除了基本的功能外,还要考虑性能优化、报错、统计等。

ErrorBoundary

React 16+ 引入。可以监听所有下级组件报错,同时降级展示 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) {        // 统计上报错误信息        console.info('componentDidCatch...', error, errorInfo)    }    render() {        if (this.state.error) {            // 提示错误            return <h2>报错了</h2>        }        // 没有错误,就渲染子组件        return this.props.children    }}export default ErrorBoundary

FunctionalDemo.js

import { useState, useEffect } from 'react'function ErrorDemo() {    const [num] = useState(100)    function clickHandler() {        num() // ErrorBoundary 无法监听事件报错,需要自行 try-catch    }    useEffect(() => {        // throw new Error('mounted error') // ErrorBoundary 可监听渲染过程的报错    }, [])    return <div>        <p>error demo - functional</p>        <button onClick={clickHandler}>error</button>    </div>}export default ErrorDemo

建议应用到最顶层,监听全局错误

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

数组件中也可以使用

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

dev 和 build

dev 环境下无法看到 ErrorBoundary 的报错 UI 效果。会显示的提示报错信息。
yarn build 之后再运行,即可看到 UI 效果。

事件报错

React 不需要 ErrorBoundary 来捕获事件处理器中的错误。与 render 方法和生命周期方法不同,事件处理器不会在渲染期间触发。

如果你需要在事件处理器内部捕获错误,使用普通的 try-catch 语句。也可以使用全局的 window.onerror 来监听。

异步错误

ErrorBoundary 无法捕捉到异步报错,可使用 window.onerror 来监听。

window.onerror = function(msg, source, line, column, error) {    console.log('window.onerror---------', msg, source, line, column, error)}// 注意,如果用 window.addEventListener('error', event => {}) 参数不一样!!!

答案

  • ErrorBoundary 监听渲染时报错

  • try-catch 和 window.onerror 捕获其他错误

扩展

Promise 监听报错要使用 window.onunhandledrejection

前端拿到错误监听之后,需要传递给服务端,进行错误收集和分析,然后修复 bug 。

“前端项目中的Vue、React错误监听怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 前端项目中的Vue、React错误监听怎么实现

本文链接: https://www.lsjlt.com/news/327827.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 前端项目中的Vue、React错误监听怎么实现
    本篇内容介绍了“前端项目中的Vue、React错误监听怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、 Vue 错误监听题目:如何...
    99+
    2023-06-30
  • 前端项目中的Vue、React错误监听
    目录一、 Vue 错误监听window.onerrorerrorCaptured 生命周期errorHandler异步错误答案扩展二、React 错误监听ErrorBoundaryd...
    99+
    2022-11-13
  • Vue前端项目自适应布局怎么实现
    这篇文章主要介绍“Vue前端项目自适应布局怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue前端项目自适应布局怎么实现”文章能帮助大家解决问题。一、单位尺寸px%vw、vh: 窗口em: ...
    99+
    2023-07-02
  • springboot vue项目管理前后端怎么实现编辑功能
    这篇文章主要介绍了springboot vue项目管理前后端怎么实现编辑功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springboot vue项目管理前后端怎么实现编辑功能文章都会有...
    99+
    2023-06-30
  • vue项目怎么实现前端预览word与pdf格式文件
    今天小编给大家分享一下vue项目怎么实现前端预览word与pdf格式文件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。页面上...
    99+
    2023-07-05
  • 怎么使用django和vue项目搭建实现前后端通信
    本文小编为大家详细介绍“怎么使用django和vue项目搭建实现前后端通信”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用django和vue项目搭建实现前后端通信”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-05
  • 在vue移动端项目中怎么实现页面缓存
    这篇文章主要介绍在vue移动端项目中怎么实现页面缓存,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!背景在移动端中,页面跳转之间的缓存是必备的一个需求。例如:首页=>列表页=>详情页。从首页进入列表页,列表...
    99+
    2023-06-14
  • 在Java项目中使用Request怎么实现获取客户端的IP地址
    今天就跟大家聊聊有关在Java项目中使用Request怎么实现获取客户端的IP地址,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在JSP里,获取客户端的IP地址的方法是:reques...
    99+
    2023-05-31
    request java ip地址
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作