大家好,我是蓝胖子的小叮当,今天分享的是Vue的第一章生命周期,大家在阅读期间有任何的意见或建议都可以留言给我哈!
1.1 Vue2生命周期详解
- beforeCreate(创建前) :数据观测和初始化事件还未开始,此时 data 的响应式追踪、event/watcher 都还没有被设置,也就是说不能访问到data、computed、watch、methods上的方法和数据。
- created(创建后) :实例创建完成,实例上配置的 options 包括 data、computed、watch、methods 等都配置完成,但是此时渲染得节点还未挂载到 DOM,所以不能访问到 $el 属性。
- beforeMount(挂载前) :在挂载开始之前被调用,相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。此时还没有挂载html到页面上。
- mounted(挂载后) :在el被新创建的 vm.$el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染到html 页面中。此过程中进行ajax交互。
- beforeUpdate(更新前) :响应式数据更新时调用,此时虽然响应式数据更新了,但是对应的真实 DOM 还没有被渲染。
- updated(更新后) :在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。此时 DOM 已经根据响应式数据的变化更新了。调用时,组件 DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
- beforeDestroy(销毁前) :实例销毁之前调用。这一步,实例仍然完全可用,this 仍能获取到实例。
- destroyed(销毁后) :实例销毁后调用,调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务端渲染期间不被调用。
- activated(keep-alive组件激活时调用) :用 keep-alive 包裹的组件在切换时不会进行销毁,选中缓存渲染后会执行 activated 钩子函数
- deactivated(keep-alive组件停用时调用) :用 keep-alive 包裹的组件在切换时不会进行销毁,而是缓存到内存中并执行 deactivated 钩子函数
- errorCaptured(捕获子组件抛出的错误时触发) :放在父组件用于捕获子组件抛出的错误时触发。用于错误处理、日志上报,返回false 可阻止错误继续向上传播
1.2 Vue3生命周期详解
-
setup(): 开始创建组件之前,在 beforeCreate 和 created 之前执行,创建的是 data 和 method
-
onBeforeMount(): 组件挂载到节点上之前执行的函数;
-
onMounted(): 组件挂载完成后执行的函数;
-
onBeforeUpdate(): 组件更新之前执行的函数;
-
onUpdated(): 组件更新完成之后执行的函数;
-
onBeforeUnmount(): 组件卸载之前执行的函数;
-
onUnmounted(): 组件卸载完成后执行的函数;
-
onActivated():当组件被 keep-alive 缓存并激活时调用,用于恢复组件状态(如滚动位置、表单数据)
-
onDeactivated ():当组件被 keep-alive 缓存并停用时调用,用于暂停组件行为(如暂停视频播放、定时器)
-
onErrorCaptured():捕获子组件抛出的错误时调用,可用于错误处理、日志上报,返回 false 可阻止错误向上传播
1.3 Vue2和Vue3生命周期区别
1.命名变化:vue2的beforeDestroy和destroyed 在vue3中变成了beforeUnmount和unmounted,命名更准确(强调 "卸载")
2.使用差异:vue2(Options API)钩子以选项形式定义在组件配置中,通过this访问组件实例;vue3也支持vue2(Options API)的写法,同时也支持(Composition API)通过导入 onXXX 函数在 setup() 中使用,无需依赖 this
3.行为差异:vue3(Composition API)中的setup() 替代了vue2(Options API)中的 beforeCreate 和 created
1.4 父子组件中生命周期的执行顺序
1.Options API
加载渲染过程:
- 父组件 beforeCreate
- 父组件 created
- 父组件 beforeMount
- 子组件 beforeCreate
- 子组件 created
- 子组件 beforeMount
- 子组件 mounted
- 父组件 mounted
更新过程:
- 父组件 beforeUpdate
- 子组件 beforeUpdate
- 子组件 updated
- 父组件 updated
销毁过程:
- 父组件 beforeDestroy
- 子组件 beforeDestroy
- 子组件 destroyed
- 父组件 destoryed
2.Composition API
加载渲染过程:
- 父组件setup()
- 父组件onBeforeMount
- 子组件setup()
- 子组件onBeforeMount
- 子组件onMounted
- 父组件onMounted
更新过程:
- 父组件onBeforeUpdate
- 子组件onBeforeUpdate
- 子组件onUpdated
- 父组件onUpdated
销毁过程:
- 父组件onBeforeUnmount
- 子组件onBeforeUnmount
- 子组件onUnmounted
- 父组件onUnmounted
好啦,关于Vue生命周期的知识点就总结到这里,如果有什么疑问、意见或建议,都可畅所欲言,谢谢大家,我也将持续更新。