vue源码解析-生命钩子

310 阅读1分钟

 vue的生命周期大概分为:beforeCreate/create、beforeMount/mounted、beforeUpdate/updated、beforeDestroy/destroyed

各阶段发生的事如下:

beforeCreate

这个钩子是在new Vue()之后触发的第一个钩子,在此阶段为数据观测阶段和event/watcher事件配置阶段,data/methods/computed/watch以上的数据均不能访问。$el/data的值都为undefined。

create

这个钩子在实例创建完成后发生,此阶段完成了数据观测,可以使用数据,更改数据。此时更改数据不会触发update函数,可以做一些初始数据的获取。由于视图还没出现,如果请求过多,会出现白屏现象。在此阶段无法与DOM进行交互,如果想要,可以通过vm.$nextTick来访问DOM

beforeMount

这个钩子完成虚拟DOM的创建,可以对数据进行更改,不会触发update。相关的render函数被调用,$el的值为虚拟的元素节点。

mounted

在此钩子,虚拟的DOM节点被真实的DOM节点替换,并将其插入到DOM树中,真实的DOM挂载完毕,完成双向数据绑定,可以访问到DOM节点,可以使用$ref属性对DOM进行操作,也可以向后台发送请求,拿到返回数据。

beforeUpdate

这个钩子可以进一步更新状态,不会触发附加的重渲染过程。该钩子在服务器端渲染期间不被调用。

updated

这个钩子被调用时,组件DOM已经更新,可以执行依赖于DOM的操作。在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。

beforeDestroy

这个钩子,实例仍然可用,可以进行收尾工作,比如:清楚计时器。此狗子在服务器端渲染期间不被调用。

destroyed

这个钩子发生在实例销毁之后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。