纯干货!你不知道的Vue错误处理机制

共 5555字,需浏览 12分钟

 ·

2022-04-15 16:35

阳光明媚的一天,面试官面了一个小伙子。小伙子在介绍项目时,说做了个错误上报机制,前端用的是Vue的错误捕获。这时面试官瞟了一眼简历,一行“熟悉Vue2源码”的字眼印入眼帘。待小伙介绍完后,面试官说不错不错,那你说说Vue的错误处理吧。小伙子双眼一瞪,心想这老铁不按常理出牌,说:这题不会!下一个~面试官:emmm... 行,那就下一个...

面试结束,小伙子立马打开Vue源码,决定一探究竟...

一、认识Vue错误处理

1. errorHandler

首先,可以看看Vue文档对其的介绍。这里不赘述太多,直接使用,一起看看打印结果。代码如下:

// main.js
Vue.config.errorHandler = function (err, vm, info{
  console.log('全局捕获 err >>>', err)
  console.log('全局捕获 vm >>>', vm)
  console.log('全局捕获 info >>>', info)
}

// App.vue
...
created () {
  const obj = {}
  // 直接在App组件的created钩子中尝试错误操作,调用obj中不存在的fn
  obj.fn()
},
methods: {
  handleClick () {
    // 绑定一个click事件,点击时触发
    const obj = {}
    obj.fn()
  }
}
...
  1. created 的输出结果如下(文章结尾会以此进行 catch 的流程分析):

  2. handleClick 的输出结果如下(文章结尾会以此进行 catch 的流程分析)由此可见:

  • err 可获取错误信息、堆栈信息
  • vm 可获取报错的vm实例(也就是对应的组件)
  • info 可获取特定错误信息。如生命周期信息 created hook,事件信息 v-on handler

2. errorCaptured

老规矩,可以先看Vue文档的介绍,这里也是直接放上使用案例。代码如下:

// App.vue