Vue的父子组件生命周期钩子函数执行顺序 (权威版)

本文详细描述了Vue中父子组件的生命周期钩子函数执行顺序,包括加载渲染、更新和销毁过程,并提供了实际代码示例和控制台输出结果。
摘要由CSDN通过智能技术生成

一、前言

         在学习到Vue的父子组件生命周期钩子函数执行顺序的时候,在网上找了很久的资料,发现网上给的参差不齐,已经见到了很多中不同的顺序。
        秉持着求真的态度,在Vue项目编写代码来测试,以下是测试的权威结果。

二、Vue的父子组件生命周期钩子函数的执行顺序如下:

1. 加载渲染过程:

父组件的 beforeCreate:在父组件实例被创建之前调用。

父组件的 created:在父组件实例创建完成后调用。

父组件的 beforeMount:在父组件开始挂载之前调用,此时模板已经编译成虚拟DOM。

子组件的 beforeCreate 和 created:在父组件的 beforeMount 钩子内,子组件的 beforeCreate 和 created 钩子依次被调用。

子组件的 beforeMount 和 mounted:子组件的虚拟DOM挂载成真实DOM后,mounted 钩子被调用。

父组件的 mounted:在子组件挂载完成后,父组件的 mounted 钩子被调用,表示整个父组件及其子组件都已经挂载完成。


2. 更新过程(当数据变化时):

父组件的 beforeUpdate:在父组件的虚拟DOM重新渲染和打补丁之前调用。

子组件的 beforeUpdate 和 updated:子组件根据新的数据重新渲染和更新。

父组件的 updated:在父组件的DOM更新后调用。


3. 销毁过程:

父组件的 beforeDestroy:在父组件销毁之前调用,用于执行清理任务。

子组件的 beforeDestroy 和 destroyed:子组件在父组件销毁之前先进行销毁。

父组件的 destroyed:父组件及其所有子组件都已经被销毁。


这个顺序确保了Vue组件的层次结构在生命周期中的正确管理。父组件需要等待其子组件完成挂载或更新后,才能继续其自己的挂载或更新过程。同样,在销毁过程中,父组件也需要等待其子组件完全销毁后,才能被完全销毁。


三、检验操作步骤

1. 父组件示例代码

<!-- ParentComponent.vue -->
<template>
  <div>
    <p>Parent Component</p>
    <ChildComponent v-if="showChild" />
    <button @click="toggleChild">Toggle Child</button>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      showChild: true
    };
  },
  beforeCreate() {
    console.log('Parent Component beforeCreate');
  },
  created() {
    console.log('Parent Component created');
  },
  beforeMount() {
    console.log('Parent Component beforeMount');
  },
  mounted() {
    console.log('Parent Component mounted');
  },
  beforeUpdate() {
    console.log('Parent Component beforeUpdate');
  },
  updated() {
    console.log('Parent Component updated');
  },
  beforeDestroy() {
    console.log('Parent Component beforeDestroy');
  },
  destroyed() {
    console.log('Parent Component destroyed');
  },
  methods: {
    toggleChild() {
      this.showChild = !this.showChild;
    }
  }
};
</script>

2. 子组件示例代码

<!-- ChildComponent.vue -->
<template>
  <p>Child Component</p>
</template>

<script>
export default {
  beforeCreate() {
    console.log('Child Component beforeCreate');
  },
  created() {
    console.log('Child Component created');
  },
  beforeMount() {
    console.log('Child Component beforeMount');
  },
  mounted() {
    console.log('Child Component mounted');
  },
  beforeUpdate() {
    console.log('Child Component beforeUpdate');
  },
  updated() {
    console.log('Child Component updated');
  },
  beforeDestroy() {
    console.log('Child Component beforeDestroy');
  },
  destroyed() {
    console.log('Child Component destroyed');
  }
};
</script>

3. 控制台输出结果(以加载渲染过程为例,此处父组件为App.vue,子组件TheWelcome.vue)

好了,以上就是所有内容了,感觉有帮助的点个赞赞吧!

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue生命周期钩子函数执行顺序如下: 1. beforeCreate: 在实例初始化之后,数据观测和事件配置之前被调用。此时,组件的属性和方法还未初始化。 2. created: 在实例创建完成后被立即调用。此时,组件的属性已经完成初始化,但DOM还未生成,无法访问到el选项。 3. beforeMount: 在挂载开始之前被调用。此时,模板编译已经完成,但还未将挂载的DOM替换为真实的DOM。 4. mounted: 在挂载完成后被调用。此时,组件已经被挂载到DOM上,可以访问到挂载的DOM元素。 5. beforeUpdate: 数据更新时,DOM重新渲染之前被调用。此时,组件的数据已经更新,但DOM还未重新渲染。 6. updated: 数据更新且DOM重新渲染完成后被调用。此时,组件的数据已经更新,并且DOM已经重新渲染。 7. beforeDestroy: 在实例销毁之前被调用。此时,组件还未被销毁,仍然可以访问到组件的数据和方法。 8. destroyed: 在实例销毁之后被调用。此时,组件已经被销毁,无法再访问到组件的数据和方法。 需要注意的是,父组件和子组件生命周期钩子函数执行顺序是先父后子。也就是说,父组件钩子函数会在子组件钩子函数之前被调用。例如,父组件的created钩子函数会在子组件的created钩子函数之前被调用。这样可以确保父组件在子组件之前完成一些初始化的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Vue常见面试题:Vue生命周期以及父子组件钩子函数执行顺序?(超详细)](https://blog.csdn.net/weixin_53934815/article/details/129092938)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Vue钩子函数以及父组件的8个钩子和子组件的8个钩子的先后执行的顺序](https://blog.csdn.net/m0_57262819/article/details/124653331)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值