Vue源碼中鉤子函數的學習分析

來源:互聯網
上載者:User
本篇文章分享給大家的內容是關於Vue源碼中鉤子函數的學習分析,內容很詳細,接下來我們就來看看具體的內容,希望可以協助到大家。

Vue執行個體在不同的生命週期階段,都調用了callHook方法。比如在執行個體初始化(_init)的時候調用callHook(vm, 'beforeCreate')和callHook(vm, 'created')。

這裡的"beforeCreate","created"狀態並非隨意定義,而是來自於Vue內部的定義的生命週期鉤子。

var LIFECYCLE_HOOKS = [  'beforeCreate',  'created',  'beforeMount',  'mounted',  'beforeUpdate',  'updated',  'beforeDestroy',  'destroyed',  'activated',  'deactivated',  'errorCaptured'];

再研究Vue官網的生命週期圖示,是不是更容易理解了。

接下來我們來看一下Vue中實現鉤子函數的源碼:

function callHook (vm, hook) {  // #7573 disable dep collection when invoking lifecycle hooks  pushTarget();  var handlers = vm.$options[hook];  if (handlers) {    for (var i = 0, j = handlers.length; i < j; i++) {      try {        handlers[i].call(vm);      } catch (e) {        handleError(e, vm, (hook + " hook"));      }    }  }  if (vm._hasHookEvent) {    vm.$emit('hook:' + hook);  }  popTarget();}

舉個例子說明:

    let test = new Vue({                      data: {                           a: 1                      },                      created: function () {                        console.log("這裡是Created");                      }                });

執行個體化一個Vue組件test,給test定義了資料data,以及created方法。而在執行個體化組件的時候,Vue內部調用了callHook(vm,'created')(上文已說明)。執行callHook函數的時候,Vue在test組件的$options中尋找created是否存在,如果存在的話就執行created相對應的方法。這裡就會執行console.log("這裡是Created")。
callHook的作用就是執行使用者自訂的鉤子函數,並將鉤子中this指向指為當前組件執行個體。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.