<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          純干貨!你不知道的Vue錯(cuò)誤處理機(jī)制

          共 5539字,需瀏覽 12分鐘

           ·

          2022-04-08 22:19

          陽(yáng)光明媚的一天,面試官面了一個(gè)小伙子。小伙子在介紹項(xiàng)目時(shí),說(shuō)做了個(gè)錯(cuò)誤上報(bào)機(jī)制,前端用的是Vue的錯(cuò)誤捕獲。這時(shí)面試官瞟了一眼簡(jiǎn)歷,一行“熟悉Vue2源碼”的字眼印入眼簾。待小伙介紹完后,面試官說(shuō)不錯(cuò)不錯(cuò),那你說(shuō)說(shuō)Vue的錯(cuò)誤處理吧。小伙子雙眼一瞪,心想這老鐵不按常理出牌,說(shuō):這題不會(huì)!下一個(gè)~面試官:emmm... 行,那就下一個(gè)...

          面試結(jié)束,小伙子立馬打開(kāi)Vue源碼,決定一探究竟...

          一、認(rèn)識(shí)Vue錯(cuò)誤處理

          1. errorHandler

          首先,可以看看Vue文檔對(duì)其的介紹。這里不贅述太多,直接使用,一起看看打印結(jié)果。代碼如下:

          //?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鉤子中嘗試錯(cuò)誤操作,調(diào)用obj中不存在的fn
          ??obj.fn()
          },
          methods:?{
          ??handleClick?()?{
          ????//?綁定一個(gè)click事件,點(diǎn)擊時(shí)觸發(fā)
          ????const?obj?=?{}
          ????obj.fn()
          ??}
          }
          ...
          1. created 的輸出結(jié)果如下(文章結(jié)尾會(huì)以此進(jìn)行 catch 的流程分析):

          2. handleClick 的輸出結(jié)果如下(文章結(jié)尾會(huì)以此進(jìn)行 catch 的流程分析)由此可見(jiàn):

          • err 可獲取錯(cuò)誤信息、堆棧信息
          • vm 可獲取報(bào)錯(cuò)的vm實(shí)例(也就是對(duì)應(yīng)的組件)
          • info 可獲取特定錯(cuò)誤信息。如生命周期信息 created hook,事件信息 v-on handler

          2. errorCaptured

          老規(guī)矩,可以先看Vue文檔的介紹,這里也是直接放上使用案例。代碼如下:

          //?App.vue