vue3生命周期(父子执行顺序)及其他钩子函数

目录

目录

生命周期

父子组件嵌套生命周期执行顺序

1.初始化与挂载生命周期的顺序

2.父子组件更新前后生命周期的顺序

3.父子组件销毁前后生命周期的顺序

nextTick

keepalive:  onActivated、 onDeactivated



生命周期

1、setup : 开始创建组件,在 beforeCreate 和 created 之前执行,创建的是 data 和 method

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

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

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

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

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

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

Vue2.X和Vue3.X对比

vue2           ------->      vue3
 
beforeCreate   -------->      setup
created        -------->      setup
beforeMount    -------->      onBeforeMount(()=>{})
mounted        -------->      onMounted(()=>{})
beforeUpdate   -------->      onBeforeUpdate(()=>{})
updated        -------->      onUpdated(()=>{})
beforeDestroy  -------->      onBeforeUnmount(()=>{})
destroyed      -------->      onUnmounted(()=>{})
activated      -------->      onActivated(()=>{})
deactivated    -------->      onDeactivated(()=>{})
errorCaptured  -------->      onErrorCaptured(()=>{})

 总结: Vue2和Vue3钩子变化不大,beforeCreate 、created  两个钩子被setup来替代

下面vue2的执行顺序(vue3也是一样的顺序,只不过前面两个生命周期变成setup)

父子组件嵌套生命周期执行顺序

1.初始化与挂载生命周期的顺序

 父组件beforeCreate => 父组件created => 父组件beforeMount => 

子组件beforeCreate => 子组件created => 子组件beforeMount =>

子组件mounted => 父组件mounted

父组件的生命周期到虚拟DOM挂载后开始执行子组件的生命周期,最后在执行父组件的真实DOM挂载

2.父子组件更新前后生命周期的顺序

父组件beforeUpdate  => 子组件beforeUpdate  =>子组件updated => 父组件updated

为了保证父组件的视图与子组件的数据同步,Vue 在子组件数据变化后先触发父组件的生命周期钩子函数,然后再更新子组件的视图

3.父子组件销毁前后生命周期的顺序

父组件beforeDestroy  => 子组件beforeDestroy  =>子组件destroyed    => 父组件destroyed 

当子组件全部销毁完成后,才会开始销毁父组件。这是为了确保子组件中的任何相关的依赖和引用在销毁父组件时不会出现问题。

nextTick

nextTick必须放在修改一个响应式数据之后,才会在onUpdated之后被调用,如果nextTick是放在所有对响应式数据修改之前,则nextTick里面的回调函数会在onBeforeUpdate方法执行前就被调用了。


<template>
  <div>{{ car }}</div>
  <button @click="changeCar">改变car</button>
</template>

<script setup lang="ts">
// ---------点击按钮打印顺序 onUpdated  nextTick  nextTick2
import { ref, nextTick, onUpdated } from 'vue'
let car: any = ref('自行车')

const changeCar = () => {
  new Promise((res) => {
    res(car.value + '1')
  }).then((res) => {
    car.value = res
    // 放在这里才能拿到更新后的dom
    nextTick(() => {
      console.log('nextTick2')
    })
  })
  // 放在这里拿不到更新后的dom
  nextTick(() => {
    console.log('nextTick')
  })
}

onUpdated(() => {
  console.log('onUpdated')
})
</script>

keepalive:  onActivated、 onDeactivated

缓存组件会有两个钩子,详情写在这篇文章了:vue3中组件保活<keep-alive>的使用_vue3组件内部使用keepalive-CSDN博客

Vue生命周期钩子函数指的是在组件实例化、渲染、更新和销毁等不同阶段执行的一些特定函数。下面是 Vue 组件的生命周期钩子函数及其执行顺序: 1. beforeCreate:在实例创建之前被调用。此时组件的数据和方法都还未初始化。 2. created:在实例创建完成之后被调用。此时组件的数据已经初始化,但 DOM 还未渲染。 3. beforeMount:在组件挂载到 DOM 之前被调用。此时模板已经编译完成,但还未挂载到页面中。 4. mounted:在组件挂载到 DOM 后被调用。此时组件已经被渲染并插入到页面中,可以进行 DOM 操作。 5. beforeUpdate:在数据更新之前被调用。此时组件还未重新渲染,但数据已经更新。 6. updated:在数据更新之后被调用。此时组件已经重新渲染,可以进行 DOM 操作。 7. beforeDestroy:在组件销毁之前被调用。此时组件还存在,可以进行一些清理工作。 8. destroyed:在组件销毁之后被调用。此时组件已经从 DOM 中移除,事件监听和定时器等资源都已经被销毁。 对于父子组件,它们的生命周期钩子函数执行顺序如下: 1. 父组件的 beforeCreate 和 created 钩子函数执行。 2. 子组件的 beforeCreate 和 created 钩子函数执行3. 子组件的 beforeMount 钩子函数执行。 4. 子组件的 mounted 钩子函数执行。 5. 父组件的 beforeMount 钩子函数执行。 6. 父组件的 mounted 钩子函数执行。 7. 数据更新时,先执行父组件的 beforeUpdate 钩子函数,然后执行子组件的 beforeUpdate 钩子函数,再执行子组件的 updated 钩子函数,最后执行父组件的 updated 钩子函数。 8. 组件销毁时,先执行父组件的 beforeDestroy 钩子函数,然后执行子组件的 beforeDestroy 钩子函数,最后执行子组件的 destroyed 钩子函数,再执行父组件的 destroyed 钩子函数。 这是 Vue 组件生命周期钩子函数的一般执行顺序,但在实际开发中可能会有特殊情况,需要根据具体需求来使用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值