记录--用了那么久的Vue,你了解Vue的报错机制吗?

这篇具有很好参考价值的文章主要介绍了记录--用了那么久的Vue,你了解Vue的报错机制吗?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

记录--用了那么久的Vue,你了解Vue的报错机制吗?

 

Vue的5种处理Vue异常的方法

相信大家对Vue都不陌生。在使用Vue的时候也会遇到报错,也会使用浏览器的F12 来查看报错信息。但是你知道Vue是如何进行异常抛出的吗?vue 是如何处理异常的呢?接下来和大家介绍介绍,Vue是如何处理这几种常见的报错的。

先和大家说说常见的五种处理报错的方法

Vue 中异常处理包含以下几个方面:

  • errorHandler
  • warnHandler
  • renderError
  • errorCaptured
  • window.onerror (不仅仅针对 Vue)

方法一:errorHandler

在main.js文件中添加,或者引入Vue

import Vue from 'vue'
Vue.config.errorHandler = function(err, vm, info) {
//do something
};

err指代 error 对象,info是一个 Vue 特有的字符串,vm指代 Vue 应用本身。记住在一个页面你可以有多个 Vue 应用。这个 error Handler 作用到所有的应用。

方法二:warnHandler

warnHandler用来捕获 Vue的warning。但是在生产环境是不起作用的。

import Vue from 'vue'
Vue.config.warnHandler = function(msg, vm, trace) {}; 

msg是报错信息和vm是报错的虚拟DOM,trace代表了组件树。

方法三: renderError

和前面两个不同,这个技巧不适用于全局,和组件相关。并且只适用于非生产环境

错误代码:

    <div>第二种错误 {{ b }}</div>

  computed: {
      b () {
      return x;
    }
  },
示例:
  renderError (h, err) {
    return h('pre', { style: { color: 'black' } }, err.stack)
  }

记录--用了那么久的Vue,你了解Vue的报错机制吗?

方法四: errorCaptured

当捕获一个来自子孙组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子可以返回 false 以阻止该错误继续向上传播。

app.config.errorHandler = (err, vm info) => { 
//do something
}

error是Error错误对象,vm是发生错误的组件实例的可访问组件属性,info是包含错误来源信息的字符串

方法五:window.onerror

特点:

  • 可以监听所有的JavaScript错误,也能监听Vue组件的报错,包括一些异步错误
  • 无法根据报错识别Vue组件的详细信息,也无法监听已经被try/catch捕获的错误
  • 无法监听资源加载失败的报错

window.onerror。它是一个全局的异常处理函数,可以抓取所有的 JavaScript 异常。如果函数返回true,则会阻止执行默认事件处理函数

 window.onerror = function(message, source, line, column, error) {
 //do something
 };

message是错误信息,source是发生错误的资源,line是发生错误的行号,column是发生错误的列数 error是Error错误对象

在errorHandler的参数中err指代 error 对象,info是一个 Vue 特有的字符串,vm指代 Vue 应用本身。在一个页面你可以有多个 Vue 应用。这个 error handler 可以作用到所有的应用。warning并不会触发 errorHandler。只有抛出了错误才会触发

第一种:引用一个不存在的变量:

在Vue中我们有时候会在编写代码时出现错误,在template中引用了未定义的变量,导致报异常,这种异常在控制台只会报[Vue warn]并不会报 ReferenceError

<div>第一种错误, {{ a }}</div>

记录--用了那么久的Vue,你了解Vue的报错机制吗?

使用warnHandler来抓取错误

Vue.config.warnHandler = function (msg, vm, trace) {
  console.log(`错误: ${msg}\n错误对象: ${trace}`);
}

记录--用了那么久的Vue,你了解Vue的报错机制吗?

第二种:将变量绑定到一个被计算出来的属性,计算的时候会抛出异常。

将变量绑定到一个被计算出来的属性,计算的时候会抛出异常代码会在控制台抛出一个[Vue warn]和一个常规的错误,网页出现白屏

  <div>第二种错误 {{ b }}</div>
  computed: {
      b () {
      return x;
    }
  },

记录--用了那么久的Vue,你了解Vue的报错机制吗?

使用errorHandler捕捉错误

import Vue from 'vue'

Vue.config.errorHandler = function (err, vm, info) {
  console.log(`错误: ${err.toString()}\n错误信息: ${info}`);
  console.log(vm)
};

记录--用了那么久的Vue,你了解Vue的报错机制吗?

使用warnHandler来抓取错误

Vue.config.warnHandler = function (msg, vm, trace) {
  console.log(`错误: ${msg}\n错误对象: ${trace}`);
}

记录--用了那么久的Vue,你了解Vue的报错机制吗?

第三种:执行一个会抛出异常的方法

这个错误在控制台也[Vue warn]和常规报错。和上一个错误的区别在于,只有你点击了按钮才会触发函数调用,才会报错。

记录--用了那么久的Vue,你了解Vue的报错机制吗?

<button @click="test1">JS错误</button>

 methods: {
    test1 () {
      return b
    },

使用errorHandler捕捉错误

第三种错误信息也可以被捕获,但是要在被点击按钮之后出现报错之后才能被捕获

import Vue from 'vue'

Vue.config.errorHandler = function (err, vm, info) {
  console.log(`错误: ${err.toString()}\n错误信息: ${info}`);
  console.log(vm)
};

记录--用了那么久的Vue,你了解Vue的报错机制吗?

使用warnHandler来抓取错误

Vue.config.warnHandler = function (msg, vm, trace) {
  console.log(`错误: ${msg}\n错误对象: ${trace}`);
}

记录--用了那么久的Vue,你了解Vue的报错机制吗?

本文转载于:

https://juejin.cn/post/7147594391752802335

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 记录--用了那么久的Vue,你了解Vue的报错机制吗?文章来源地址https://www.toymoban.com/news/detail-746706.html

到了这里,关于记录--用了那么久的Vue,你了解Vue的报错机制吗?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 深入了解 Vue 3 组件间通信机制

    深入了解 Vue 3 组件间通信机制

    在 Vue3 中,组件是构建应用界面的核心概念之一。组件可以看作是可复用、自包含和可组合的代码块,用于封装 UI 元素和相应的行为逻辑。 通俗来说就是,组件(Component)是一种对数据和方法的简单封装,每一个组件有自己单独的逻辑,并且可以分别管理。不同的组件组合

    2024年02月13日
    浏览(9)
  • Vue项目遇到的报错:Module Error (from ./node_modules/eslint-loader/index.js)

    Vue项目遇到的报错:Module Error (from ./node_modules/eslint-loader/index.js)

    在运行创建的项目时出现的报错问题 Module Error (from ./node_modules/eslint-loader/index.js);具体报错如下图显示; 此问题在有时项目运行时不会报错,有时会报错; 找到根目录,在根目录下创建文件 vue.config.js 在创建的项目文件内输入 保存,重新运行便可。 初始化并重新安装 esl

    2024年02月06日
    浏览(15)
  • 如何解决npm install 的报错npm ERR! network request to http://registry.cnpmjs.org/vue-cli failed

    报错: 解决方法: npm ERR! network request to http://registry.cnpmjs.org/vue-cli failed, reason: getaddrinfo ENOTFOUND 这句话已经很明显的提示 http://registry.cnpmjs.org/vue-cli 请求失败了,但网上其他博客还是让代理这个路径。试了网上很多方法都没有用。最后执行了以下语句,执行成功 直接代理淘

    2024年02月04日
    浏览(43)
  • 解决:使用前端路由时的报错Cannot destructure property ‘options’ of ‘(0 , vue__WEBPACK_IMPORTED_MODULE_1__.inject)

    解决:使用前端路由时的报错Cannot destructure property ‘options’ of ‘(0 , vue__WEBPACK_IMPORTED_MODULE_1__.inject)

    使用前端路由时,代码无误,但是页面不显示任何东西,控制台报错: Cannot destructure property ‘options’ of ‘(0 , vue__WEBPACK_IMPORTED_MODULE_1__.inject)(…)’ as it is undefined. step1: step3 最终就可以得到期望的效果啦

    2024年02月16日
    浏览(9)
  • 低代码,你真的了解吗?真的那么火吗?

    低代码,你真的了解吗?真的那么火吗?

    近几年来,在国内讨论低代码的场合越来越多,任何技术峰会,少不了会提及低代码甚至零代码。 简单地说,低代码平台是一种软件开发工具,旨在让用户使用最少的编码知识和手动编程工作来构建应用程序。这些平台提供了图形化的用户界面和可视化工具,使用户能够通过

    2024年02月03日
    浏览(10)
  • Vue3 - 解决 build / dev 打包运行时突然出现一堆 ts 相关的报错,强制关闭整个项目的 ts 代码语法校验和验证(webpack / vite 均可)

    无论您是 vite 还是 webpack,都可以 100% 去掉运行或打包时的 ts 语法验证。 本文 实现了在 vue3 + ts 开发中,关闭运行、打包部署命令时出现的各种 ts 校验报错,去掉对 ts 的验证, 有些朋友对 ts 不是很了解(所以在写代码时没注意一些语法),导致最终 build 打包时出现了很多

    2024年02月11日
    浏览(73)
  • win10照片不能用了,记录重新安装照片的过程(appx安装)

    win10照片不能用了,记录重新安装照片的过程(appx安装)

    前段时间在电脑看图片时发现,双击打开图片一段时间后会卡死,于是重置、修复了一下照片这个应用。 结果发现,重置、修复完后还是那样,而且还出现过双击打开图片变成画图3D打开的情况。 最后似乎是卸载了?反正今天再看的时候发现照片这个应用已经没有了,于是想

    2024年02月06日
    浏览(11)
  • Nginx 转发 SSL 的报错

    Nginx 转发 SSL 的报错

      昨天遇到一个问题,主机服务还没有转成https,但要转发给一个https地址,一直在报一个错 upstream server temporarily disabled while SSL handshaking to upstream, client: xxx.xxx.xxx.xxx, server: localhost SSL_do_handshake() failed (SSL: error:1408F10B:SSL routines:ssl3_get_record:wrong version number) while SSL handshaking to

    2024年02月14日
    浏览(11)
  • Android 打包可能遇到的报错

    Android 打包可能遇到的报错

    问题一:com.android.ide.common.signing.KeytoolException: Failed to read key testxlk from store “E:AndroidAndroid Keystestkey.jks”: Invalid keystore format 升高gradle JDK版本,我这里用了JDK11 问题二:Integrity check failed: java.security.NoSuchAlgorithmException: Algorithm HmacPBESHA256 not available 在解决问题一时升级到JDK1

    2024年04月11日
    浏览(16)
  • 安装使用LangChain时的报错解决

    刚刚装了LangChain但是引入各种包都报错,原因貌似为 Python3.7 不支持 LangChain,需要开启一个新的Python3.10环境,再重新安装即可正常运行。 创建新的python环境 conda create -n new_env python==3.10 重新安装 pip install langchain 这是当时的报错信息,写出来希望小伙伴来避避坑

    2024年02月15日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包