- Vue的生命周期从创建一个Vue实例开始,之后Vue要进行初始化事件和初始化生命周期。
- 执行beforeCreate钩子函数,这个函数执行在初始化之后,创建组件之前,所以还不能访问数据,组件中的data,ref都为undefind。
- 进入了初始化中,初始化data和props,并且给数据绑定上数据劫持
- 执行created钩子函数,这个函数在组件创建完成后立即被调用,组件中有了data对象,可以操作data,可以发请求和访问数据了,ref依然为undefind。因为还没有挂载,所以el不可用。
- 进行编译选项,是否有el或template,再根据编译选项作为模板将数据和compile函数(编译函数)进行结合,创建出虚拟DOM对象。
以上初始化阶段完成,下面来描述创建过程
- 数据挂载前先执行beforeMount钩子函数,页面还没有创建出HTML元素,data初始化已经完成,虚拟dom已经存在
- 创建vm.$el来替换el,并切换掉原有的编译模板,生成一个真正可用的HTML
- 完成页面的数据挂载后执行Mounted,这时可以操作数据和DOM了
以上,创建阶段描述完了,接下来是数据更新时
- 当数据被更新时调用beforeUpdate钩子函数,它在页面数据更新之前调用,并监听数据的变化,但不可以在这里更改数据
- 虚拟DOM重新渲染并应用更新
- updated数据更新完毕 在这个生命周期钩子函数中 我们可以获取到当前最新的数据(也就是页面中的最新数据)
以上,更新阶段描述完了,接下来是销毁阶段
- 当调用vm.$destroy()函数时,进入销毁阶段
- beforeDestroy 销毁之前 还是可以使用HTML的,也可以获取到数据
- 销毁中 终止对象劫持(最主要)子组件,事件
- destroyed 销毁之后 我们对 Vue实例提供的DOM操作就无效了 但是还是可以获取到数据的
作者:小q 链接:https://www.jianshu.com/p/f19aa636dc47 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
?
|