详解Vue源码学习之callHook钩子函数


Posted in Javascript onJuly 25, 2018

Vue实例在不同的生命周期阶段,都调用了callHook方法。比如在实例初始化(_init)的时候调用callHook(vm, 'beforeCreate')和callHook(vm, 'created')。

详解Vue源码学习之callHook钩子函数

这里的"beforeCreate","created"状态并非随意定义,而是来自于Vue内部的定义的生命周期钩子。

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

再研究Vue官网的生命周期图示,是不是更容易理解了。

详解Vue源码学习之callHook钩子函数

接下来我们来看一下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指向指为当前组件实例。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 判断浏览器类型及版本
Feb 21 Javascript
了解jQuery技巧来提高你的代码
Jan 08 Javascript
13 个JavaScript 性能提升技巧分享
Jul 26 Javascript
SpringMVC返回json数据的三种方式
Dec 10 Javascript
JS中setTimeout的巧妙用法前端函数节流
Mar 24 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
Sep 05 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
Sep 20 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
Feb 16 Javascript
jquery radio 动态控制选中失效问题的解决方法
Feb 28 jQuery
js控制随机数生成概率代码实例
Mar 21 Javascript
浅谈Vue.set实际上是什么
Oct 17 Javascript
Node.js API详解之 Error模块用法实例分析
May 14 Javascript
详解操作虚拟dom模拟react视图渲染
Jul 25 #Javascript
浅析JS中回调函数及用法
Jul 25 #Javascript
详解使用mpvue开发github小程序总结
Jul 25 #Javascript
详解mpvue开发小程序小总结
Jul 25 #Javascript
Bootstrap table表格初始化表格数据的方法
Jul 25 #Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
Jul 24 #Javascript
微信小程序实现图片上传放大预览删除代码
Jun 28 #Javascript
You might like
PHP中使用json数据格式定义字面量对象的方法
2014/08/20 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
2016/11/25 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
Jquery 学习笔记(一)
2009/10/13 Javascript
js 函数的执行环境和作用域链的深入解析
2009/11/01 Javascript
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
jQuery ajax dataType值为text json探索分享
2013/09/23 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
JavaScript中的函数重载深入理解
2014/08/04 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
浅谈js中对象的使用
2016/08/11 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
layui弹出层效果实现代码
2017/05/19 Javascript
简单实现vue中的依赖收集与响应的方法
2019/02/18 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
JavaScript缺少insertAfter解决方案
2020/07/03 Javascript
Python中的列表知识点汇总
2015/04/14 Python
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
python虚拟环境virtualenv的使用教程
2017/10/20 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
Python tkinter三种布局实例详解
2020/01/06 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
Java基础知识面试题
2014/03/25 面试题
幼儿园保育员辞职信
2014/01/12 职场文书
竞选团支书演讲稿
2014/04/28 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
idea下配置tomcat避坑详解
2022/04/12 Servers
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL