[1] Vue2生命周期钩子

53 阅读2分钟

一、是什么

Vue实例从创建到销毁经历的生命周期叫做生命周期钩子。帮助开发者介入这些阶段去组织自己的逻辑。

二、生命周期钩子分类

创建阶段的生命周期钩子:

  • beforeCreate 创建前:实例刚在内存中被创建出来,此时,还没有初始化好data 和 methods属性

  • created 创建后:实例已经在内存中创建OK,此时data和methods 已经创建OK ,此时还没有开始编译模板

  • beforeMount 载入前:此时已经完成了模板的编译,但是还没有挂载到页面中。el完成了初始化。

  • mounted 载入后:此时已经将编译好的模板挂载到了页面指定的容器中显示。

运行阶段的生命周期钩子:

  • beforeUpdate 更新前:状态更新之前执行此函数,此时data中的状态值是最新的,但是界面上显示的数据还是旧数据,因为此时还没有开始重新渲染DOM节点。 【数据被更新,但未重新渲染】
  • updated 更新后:实力更新完毕之后调用此函数,此时data中的状态值 和 界面上显示的数据,都已经完成了更新,界面已将被重新渲染 updated 事件执行的时候,页面和 data 数据已经保持同步,都是最新数据

销毁阶段的生命周期钩子

  • beforeDestroy 销毁前: 实例销毁之前调用。在这一步,实例仍然完全可用
  • destroyed 销毁后:Vue实例销毁后调用,调用后,Vue实例指示的所有东西都会解除绑定,所有的事件监听器会被移除,所有的子实例也会被销毁

image.png

父子组件 生命周期加载顺序。

image.png

三、总结

不能使用箭头函数,this问题。

如果调用 methods中的方法,或者操作data中的数据,最早只能在created中操作。

beforeMount 执行的时候,页面中的元素还没有真正被挂载替换过来,只是之前写的模板字符串。

DOM 渲染在 mounted 中就已经完成了,表示内存中的模板已经真实的挂载到了的页面中去,已经可以看到真实渲染好的页面。

mounted 是实例创建期间的最后一个生命周期函数,当执行完mounted就表示,实例已将被完全创建好了。

如果操作dom,最早在mounted中操作。

<div id="app">
    <template>
        <button ref="btn" @click="changeMsg"> 点我</button>
    </template>
</div>

image.png

使用情况:

  • beforecreate : 举个栗子:可以在这加个loading事件
  • created :在这结束loading,还做一些初始化,实现函数自执行
  • mounted : 在这发起后端请求,拿回数据,配合路由钩子做一些事情。
  • beforeDestroy: 移除监听事件。
    beforeDestroy () {
           window.removeEventListener('message', this.onPostMessage);
    }

  • this --Vue实例
  • this.$vnode

image.png