5. vue的生命周期
vue2和vue3的生命周期是有区别的
beforeCreate created beforeMount mounted beforeUpdate updated beforeDestroy Destoryed
vue3将beforeDestroy
和Destroyed
替换为beforeUnmount
和unmounted
options API
和Composition API
在生命周期上也有差别:
Composition API
提供了setup
函数作为入口函数,替换了beforeCreate
和created
这两个生命周期钩子。所以实际开发中,可以简单把setup理解为created进行使用。
大致流程(Vue2)
挂载流程
- 初始化事件及生命周期
- 触发
beforeCreate
- 实例创建完成、组件、属性等初始化完成,触发
created
- vue开始解析模板,生成虚拟DOM,页面还不能显示解析好的内容
- 触发
beforeMount
- 将内存中的虚拟DOM转换为真实DOM
- 触发
mounted
更新流程
- 数据更新,视图还未更新时,触发
beforeUpdate
- 根据新数据,生成新的虚拟DOM,随后与旧的DOM进行Diff比较。最终完成真实DOM的更新
- 触发
updated
销毁流程
- 销毁组件时,触发
beforeDestroy
- 销毁所有方法等,触发
destroyed
数据请求在created
和mounted
的区别
created是在组件实例一旦创建完成的时候立刻调用,这时候页面dom节点并未生成;mounted是在页面dom节点渲染完毕之后就立刻执行的。触发时机上created是比mounted要更早的,两者的相同点:都能拿到实例对象的属性和方法。 讨论这个问题本质就是触发的时机,放在mounted中的请求有可能导致页面闪动(因为此时页面dom结构已经生成),但如果在页面加载前完成请求,则不会出现此情况。建议对页面内容的改动放在created生命周期当中。