面试题:Vue 中子组件和父组件钩子的执行顺序是什么?

在 Vue 中,父子组件的生命周期钩子执行顺序是固定的,了解这些顺序对于理解组件的初始化、更新和销毁过程非常重要。以下是父子组件生命周期钩子的执行顺序:


1. 组件加载时的生命周期钩子顺序

当父组件渲染并包含子组件时,生命周期钩子的执行顺序如下:

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

说明

  • 父组件会先执行到 beforeMount,然后开始渲染子组件。
  • 子组件完成挂载后,父组件才会完成挂载。

2. 组件更新时的生命周期钩子顺序

当父组件的数据发生变化导致父子组件重新渲染时,生命周期钩子的执行顺序如下:

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

说明

  • 父组件先触发 beforeUpdate,然后子组件更新。
  • 子组件更新完成后,父组件才会触发 updated

3. 组件销毁时的生命周期钩子顺序

当父组件销毁时,包含的子组件也会被销毁,生命周期钩子的执行顺序如下:

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

说明

  • 父组件先触发 beforeDestroy,然后子组件销毁。
  • 子组件销毁完成后,父组件才会触发 destroyed

4. 完整的生命周期钩子顺序

以下是一个完整的父子组件生命周期钩子执行顺序的示例:

父组件:

<template>
  <div>
    <ChildComponent />
  </div>
</template>

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

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

子组件:

<template>
  <div>
    <p>Child Component</p>
  </div>
</template>

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

输出结果:

  1. 加载时
   Parent beforeCreate
   Parent created
   Parent beforeMount
   Child beforeCreate
   Child created
   Child beforeMount
   Child mounted
   Parent mounted
  1. 更新时
   Parent beforeUpdate
   Child beforeUpdate
   Child updated
   Parent updated
  1. 销毁时
   Parent beforeDestroy
   Child beforeDestroy
   Child destroyed
   Parent destroyed

5. 总结

  • 加载时:父组件先初始化,子组件挂载完成后,父组件才完成挂载。
  • 更新时:父组件先触发更新,子组件更新完成后,父组件才完成更新。
  • 销毁时:父组件先触发销毁,子组件销毁完成后,父组件才完成销毁。

理解这些顺序有助于更好地控制组件的生命周期行为,尤其是在处理父子组件之间的数据传递和状态管理时。

THE END
点赞5 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容