当前位置:网站首页 > Vue.js开发 > 正文

vue2生命周期啥时候做(vue2的生命周期)



生命周期的讲解可以参考这篇文章

上篇文章更偏向于解释vue生命周期在不同的阶段都做了什么,但是他又是如何实现的我们不得而知,vue生命周期主要来说分为四个阶段,初始化阶段、模板编译阶段、挂载阶段和销毁阶段,从源码的角度来深入学习一下vue生命周期初始化阶段所做的工作和内部原理

从生命周期流程图中我们可以看到,初始化阶段所做的工作也可大致分为两部分:第一部分是,也就是创建一个实例;第二部分是为创建好的实例初始化一些事件、属性、响应式数据等。

 关键字在 中表示从一个类中实例化出一个对象来,由此,  实际上是一个类,所以实际上是执行了类的构造函数。

image.png

在源码的src/core/instance/index.js文件里看到了类的定义

 

我们可以看出在这段代码中的核心代码其实就是,调用原型上的方法并将传入。而方法又是通过执行得到的,接下来在文件下看看函数:

image.png

这是全部的方法的代码:

 

为了更加直观,我们把一些不太重要的代码剔除然后留下核心代码:

 

可以看到,在 函数内部就只干了一件事,那就是给 类的原型上绑定 方法,同时 方法的定义也在该函数内部。现在我们知道了, 会执行 类的构造函数,构造函数内部会执行 方法,所以 的作用其实就是 方法的作用,那么我们仔细看看 方法都干了哪些事情:

  • 首先,把 实例赋值给变量 ,并且把用户传递的 选项与当前构造函数的 属性及其父级构造函数的 属性进行合并(关于属性如何合并的问题下面会介绍),得到一个新的 选项赋值给 属性,并将 属性挂载到 实例上。
 
  • 然后通过调用一些初始化函数来为 实例初始化一些属性,事件,响应式数据。
 
  • 在所有的初始化工作完成后,判断是否传入了 选项,如果传入了则调用 函数进入模板编译和挂载阶段,如果没有就不进入下一个生命周期需要用户手动执行 方法才进入下一个生命周期阶段。

由上面的的阶段可以看出它完成了 的整个初始化阶段,接下来再来看看 里调用的那几个初始化函数。

方法里首先会调用 函数来进行属性合并。

 

它实际上就是把  的返回值和  做合并,下面就是方法:

 

在  的时候定义了 ,代码在  中:

 

首先通过  创建一个空对象,然后遍历 , 的定义在  中:

 

遍历  后的代码相当于:

 

最后通过  把一些内置组件扩展到  上, 的内置组件目前 有、 和 组件,这也就是为什么我们在其它组件中使用这些组件不需要注册的原因。

那么回到  这个函数,它的定义在  中,可以看出,函数的主要功能是把  和  这两个对象根据一些合并策略,合并成一个新对象并返回。

 

首先递归把  和  合并到  上,然后创建一个空对象,遍历 ,把中的每一项通过调用 函数合并到空对象里,接着再遍历 ,把存在于里但又不在 中 的属性继续调用 函数合并到空对象里,最后,就是最终合并后得到的结果,将其返回。


这里值得一提的是  函数,它不是简单的把属性从一个对象里复制到另外一个对象里,而是根据被合并的不同的选项有着不同的合并策略。例如,对于有的合并策略,即该文件中的函数;对于有的合并策略,即该文件中的函数等等。这就是设计模式中非常典型的策略模式


函数的源码位于 中:

 

首先从实例的中获取到需要触发的钩子名称所对应的钩子函数数组,我们说过,每个生命周期钩子名称都对应了一个钩子函数数组。然后遍历该数组,将数组中的每个钩子函数都执行一遍。

注:文章部分摘自vue源码学习社区,原文十分详细,笔者只是跟随思路阅读并手打一遍留下印象,方便以后回顾,感兴趣的同学可到原文中细学。

到此这篇vue2生命周期啥时候做(vue2的生命周期)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 跨域解决方案nginx(跨域解决方案vue)2025-03-15 20:54:04
  • jsj啥意思(js !什么意思)2025-03-15 20:54:04
  • jsjl是什么意思(jsl啥意思)2025-03-15 20:54:04
  • Json字符串转数组 js(json数组转string)2025-03-15 20:54:04
  • vue下载安装(vue下载安装包)2025-03-15 20:54:04
  • 报文解析工具V2.3(报文解析工具J)2025-03-15 20:54:04
  • jvm1.8内存模型图(jvm内存模型与内存结构)2025-03-15 20:54:04
  • vue.js 菜鸟教程(vue.js入门教程)2025-03-15 20:54:04
  • js数组方法有哪些(js数组方法总结)2025-03-15 20:54:04
  • 多级列表2.1~3.1怎么设置(怎样设置多级列表2.1)2025-03-15 20:54:04
  • 全屏图片