vue生命周期

感情迁移 提交于 2020-03-21 01:07:54

  今天来说说vue的生命周期,这也是vue最基本要知道的,面试是也会常被提到的一个问题,现在开始吧!

 

vue生命周期常用的8个阶段:

  beforeCreate阶段:vue实例的挂载元素el和数据对象data都是undefined,还没有开始初始化。

  created阶段:vue是咧的数据对象data有了,可以访问里面的数据和方法,未挂载到DOM,el还没有。

  beforeMount阶段:vue实例的el和data都初始化了,但是挂载之前为虚拟的dom节点。

  mounted阶段:vue实例挂载到真实DOM上,就可以通过DOM获取DOM节点。

  beforeUpdate阶段:响应式数据更新时调用,发生在虚拟DOM打补丁之前,适合在更新之前访问现有的DOM,比如手动移除已添加的事件监听器

  updated阶段:虚拟DOM重新渲染和打补丁之后调用,组成新的DOM已经更新,避免在这个钩子函数中操作数据,防止死循环。

  beforeDestory阶段:实例销毁前调用,实例还可以用,this能获取到实例,常用于销毁定时器,解绑事件。

  destroyed阶段:实例销毁后调用,调用后所有事件监听器会被移除,多有的子实例都会被销毁

 

 

vue生命周期详细解说:

  我们在谈到Vue生命周期的时候,首先需要创建一个实例,也就是在new Vue()的对象过程当中,首先执行了init(init是vue组件里面默认去执行的),在init的过程当中首先调用了beforeCreate,然后再injections(注射)和reactivity(反应性)的时候,他会再去调用created。

  所以在init的时候,事件已经调用了,我们在beforeCreate的时候千万不要去修改data里面赋值的数据,最早也要放在created里面去做一些行为。

  当created完成之后,他回去判断instance(实例)里面是否含有‘el’option(选项),如果没有的话,它会调用vm.$mount(el)这个方法,然后执行下一步;如果有的话,直接执行下一步,紧接着会判断是否含有“template”这个选项,如果有的话,他会把“template”解析成一个render function,这是一个template编译过程,结果是解析成了render函数:

  render(h){

    return h('div',{},this.text)

  }

  解释一下,render函数里面的传参h就是Vue里面的createElement方法,return返回一个createElement方法,其中要传3个参数,第一个参数就是创建div标签,第二个参数传了一个对象,对象里面可以是我们组建上面的props,或者是事件之类的东西,第三个参数是div标签里面的内容,这里我们指向了data里面的text。

  使用render函数的结果和我们之前使用template解析出来的结果是一样的。render函数时发生在beforeMount和mounted之间的,这也是从侧面说明了,在beforeMount的时候,$el还只是我们在HTML里面写的节点,然后到mounted的时候,他们把渲染出来的内容挂载到了DOM节点上。这中间的过程其实是执行了render function的内容。在使用.vue文件开发的过程当中,我们在里面写了template模板,在经过了vue-loader的处理之后,就变成了render function,最终放到了vue-loader解析过得文件里面。(这样做的好处:是因为在解析template变成render function的过程,是一个非常耗时的过程,vue-loader帮我们处理了这些内容之后,当我们在页面上执行vue代码的时候,效率会变得更高)

  beforeMount在有了render function的时候才会执行,当执行玩render function之后,就回调用mounted这个钩子,在mounted挂载完毕之后,这个实例就算是走完了流程。

  后续的钩子函数执行的过程都是需要外部的触发才会执行。比如说有数据的变化,会调用beforeUpdate,然后经过Virtual DOM,最后updated更新完毕。组件销毁的时候,会调用beforeDestory和destoryed。

  这就是一个vue实例从新建到销毁的一个完整流程,以及在这个过程中他会触发那些生命周期钩子函数。

 

钩子函数:

  在这里简单的说一下钩子函数,钩子函数,其实和回调是一个概念,当系统执行到某处时,检查是否有hook,有则回调。说的更直白一点,每个组件都有属性,方法和时间。所有的生命周期都归于事件,在某个时刻自动执行。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!