Vue 父子组件生命周期钩子执行顺序详解

Vue 中父子组件的生命周期钩子函数遵循“先父后子”的调用顺序和“先子后父”的渲染与销毁顺序,常用钩子包括 created、mounted、updated 和 destroyed 等,分别对应组件创建、挂载、更新和销毁的不同阶段;Vue3 中以 setup() 替代了 beforeCreate 和 created,并对销毁钩子重命名;组件之间的数据传递可通过 props、$emit、ref、.sync、eventBus 或 Vuex 实现,不同场景应选择适合的通信方式。

1、生命周期执行顺序概览

1)加载/渲染阶段

组件创建流程为:调用顺序是先父后子,渲染完成顺序是先子后父。

步骤

生命周期钩子

所属组件

1

beforeCreate

父组件

2

created

父组件

3

beforeMount

父组件

4

beforeCreate

子组件

5

created

子组件

6

beforeMount

子组件

7

mounted

子组件

8

mounted

父组件

2)数据更新阶段

步骤

生命周期钩子

所属组件

1

beforeUpdate

父组件

2

beforeUpdate

子组件

3

updated

子组件

4

updated

父组件

3)销毁阶段

步骤

生命周期钩子

所属组件

1

beforeDestroy

父组件

2

beforeDestroy

子组件

3

destroyed

子组件

4

destroyed

父组件

2、各生命周期钩子说明(Vue2)

生命周期钩子

说明

beforeCreate

实例初始化完成之前,

data

methods

等尚不可用。

created

实例已创建完成,可访问响应式数据,尚未挂载 DOM。可用于数据请求。

beforeMount

模板已编译,虚拟 DOM 即将挂载,尚未渲染成真实 DOM。

mounted

模板渲染完成,真实 DOM 挂载,适合操作 DOM 或发起依赖 DOM 的请求。

beforeUpdate

响应式数据更新前触发,可访问旧数据状态。

updated

DOM 更新后触发,注意不要在此更改数据,以免陷入死循环。

beforeDestroy

实例销毁前,可进行清理操作,如注销定时器、解绑事件等。

destroyed

实例完全销毁,所有绑定与子组件均已清除。

3、Vue 3 生命周期变化

1)beforeCreate + created → 被 setup() 替代

2)beforeDestroy → 更名为 onBeforeUnmount

3)destroyed → 更名为 onUnmounted

4)其余生命周期统一加前缀 on(如 onMounted, onUpdated

4、Vue 组件间传值方式总结(Vue2)

类型

方法

描述

父传子

props

子组件通过 props 接收数据,单向传递,不能直接修改。

子传父

$emit

子组件通过事件向父组件传值,父组件用监听事件方式接收。

父访问子

ref

父组件通过

this.$refs.id

调用子组件方法/属性。

双向绑定

.sync

父组件监听子组件

update:

事件并自动更新传值。

兄弟组件

eventBus

通过发布/订阅事件通信。

$emit $on

全局状态

Vuex

使用状态管理统一传值,适用于大型应用,不推荐小项目使用。

推荐阅读
cjavapy编程之路首页