Vue(一)生命周期

81 阅读4分钟

大家好,我是蓝胖子的小叮当,今天分享的是Vue的第一章生命周期,大家在阅读期间有任何的意见或建议都可以留言给我哈!

1.1 Vue2生命周期详解
  1. beforeCreate(创建前) :数据观测和初始化事件还未开始,此时 data 的响应式追踪、event/watcher 都还没有被设置,也就是说不能访问到data、computed、watch、methods上的方法和数据
  2. created(创建后) :实例创建完成,实例上配置的 options 包括 data、computed、watch、methods 等都配置完成,但是此时渲染得节点还未挂载到 DOM,所以不能访问到 $el 属性
  3. beforeMount(挂载前) :在挂载开始之前被调用,相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。此时还没有挂载html到页面上。
  4. mounted(挂载后) :在el被新创建的 vm.$el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染到html 页面中。此过程中进行ajax交互
  5. beforeUpdate(更新前) :响应式数据更新时调用,此时虽然响应式数据更新了,但是对应的真实 DOM 还没有被渲染。
  6. updated(更新后) :在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。此时 DOM 已经根据响应式数据的变化更新了。调用时,组件 DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
  7. beforeDestroy(销毁前) :实例销毁之前调用。这一步,实例仍然完全可用,this 仍能获取到实例。
  8. destroyed(销毁后) :实例销毁后调用,调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务端渲染期间不被调用。
  9. activated(keep-alive组件激活时调用) :用 keep-alive 包裹的组件在切换时不会进行销毁,选中缓存渲染后会执行 activated 钩子函数
  10. deactivated(keep-alive组件停用时调用) :用 keep-alive 包裹的组件在切换时不会进行销毁,而是缓存到内存中并执行 deactivated 钩子函数
  11. errorCaptured(捕获子组件抛出的错误时触发) :放在父组件用于捕获子组件抛出的错误时触发。用于错误处理、日志上报,返回false 可阻止错误继续向上传播
1.2 Vue3生命周期详解
  1. setup(): 开始创建组件之前,在 beforeCreate 和 created 之前执行,创建的是 data 和 method

  2. onBeforeMount(): 组件挂载到节点上之前执行的函数;

  3. onMounted(): 组件挂载完成后执行的函数;

  4. onBeforeUpdate(): 组件更新之前执行的函数;

  5. onUpdated(): 组件更新完成之后执行的函数;

  6. onBeforeUnmount(): 组件卸载之前执行的函数;

  7. onUnmounted(): 组件卸载完成后执行的函数;

  8. onActivated():当组件被 keep-alive 缓存并激活时调用,用于恢复组件状态(如滚动位置、表单数据)

  9. onDeactivated ():当组件被 keep-alive 缓存并停用时调用,用于暂停组件行为(如暂停视频播放、定时器)

  10. onErrorCaptured():捕获子组件抛出的错误时调用,可用于错误处理、日志上报,返回 false 可阻止错误向上传播

1.3 Vue2和Vue3生命周期区别

1.命名变化:vue2的beforeDestroydestroyed 在vue3中变成了beforeUnmountunmounted,命名更准确(强调 "卸载")

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

加载渲染过程:

  1. 父组件 beforeCreate
  2. 父组件 created
  3. 父组件 beforeMount
  4. 子组件 beforeCreate
  5. 子组件 created
  6. 子组件 beforeMount
  7. 子组件 mounted
  8. 父组件 mounted

更新过程:

  1. 父组件 beforeUpdate
  2. 子组件 beforeUpdate
  3. 子组件 updated
  4. 父组件 updated

销毁过程:

  1. 父组件 beforeDestroy
  2. 子组件 beforeDestroy
  3. 子组件 destroyed
  4. 父组件 destoryed

2.Composition API

加载渲染过程:

  1. 父组件setup()
  2. 父组件onBeforeMount
  3. 子组件setup()
  4. 子组件onBeforeMount
  5. 子组件onMounted
  6. 父组件onMounted

更新过程:

  1. 父组件onBeforeUpdate
  2. 子组件onBeforeUpdate
  3. 子组件onUpdated
  4. 父组件onUpdated

销毁过程:

  1. 父组件onBeforeUnmount
  2. 子组件onBeforeUnmount
  3. 子组件onUnmounted
  4. 父组件onUnmounted

好啦,关于Vue生命周期的知识点就总结到这里,如果有什么疑问、意见或建议,都可畅所欲言,谢谢大家,我也将持续更新。