Vue.js 组件生命周期中的几个重要阶段:创建、初始化数据、编译模板、挂载 DOM、更新渲染、卸载。这些阶段对应了 Vue.js 的生命周期钩子函数。下面我将详细解释每个阶段以及它们在 Vue.js 生命周期中的作用。
文章目录
1. 创建(Creation)
-
生命周期钩子:
beforeCreate
-
描述:
- 在这个阶段,Vue 组件实例被创建。但事实,此时,组件实例还没有完成初始化,
data
、methods
、computed
等还没有设置好,因此无法访问这些属性。 this
仍然指向组件实例,但它是一个未初始化的状态。- 那beforeCreate钩子函数的作用是什么喃?1.使用 beforeCreate 钩子来设置或引入全局的插件、库或其他与组件生命周期无关的配置。这是因为在 beforeCreate 阶段,组件实例已经存在,但还没有执行任何与组件数据相关的逻辑。2.跨组件通信的早期设置在大型应用中,可能需要beforeCreate 钩子中设置某些跨组件的事件总线或通信机制,以确保这些机制在组件的整个生命周期中都可用
- 在这个阶段,Vue 组件实例被创建。但事实,此时,组件实例还没有完成初始化,
2. 初始化数据(Initialization of Data)
-
生命周期钩子:
created
-
描述:
-
created 钩子函数是组件生命周期中第一个可以安全地访问和操作数据的阶段。
-
组件的实例已创建完成,此时
data
、methods
、computed
等已经被初始化。 -
这是执行初始数据操作的合适阶段,如设置默认数据、发起网络请求获取数据(组件还未挂载到 DOM 中,异步请求的结果可以在稍后的渲染中使用。)、 事件监听与订阅、设置定时器等。
-
虽然数据已初始化,但组件尚未挂载到 DOM,因此不能访问
this.$el
或执行任何与 DOM 相关的操作。
3. 编译模板(Template Compilation)
-
生命周期钩子:
beforeMount
-
描述:
- Vue 在内存中编译模板,将模板转换为虚拟 DOM(Virtual DOM)。
- 此时虚拟 DOM 已经准备好,但还没有渲染到真实的 DOM 中。
this.$el
还没有更新。- 注意:模板编译和虚拟 DOM 的概念是理解 Vue.js 如何高效渲染和更新视图的关键。
4. 挂载 DOM(Mounting the DOM)
-
生命周期钩子:
mounted
-
描述:
- 在这个阶段,编译好的虚拟 DOM 被渲染为真实的 DOM 元素,并插入到页面中。
- 组件的
this.$el
已经指向实际的 DOM 元素,因此可以安全地操作 DOM。 - 这是初始化与 DOM 有关的第三方库、执行依赖于 DOM 的操作的最佳时机。
5. 更新渲染(Rendering Updates)
-
生命周期钩子:
beforeUpdate
、updated
-
描述:
-
当组件的数据变化时,会触发重新渲染过程。
-
beforeUpdate
:- 这是在数据变化引起的重新渲染过程开始之前被调用。
- 此时,组件的 DOM 还未更新,仍然显示旧的数据状态。
-
updated
:- 在组件重新渲染并将更新应用到 DOM 后调用。
- 此时,组件的 DOM 已经更新为新的状态。
-
6. 卸载(Unmounting)
-
生命周期钩子:
beforeUnmount
(Vue 2 中是beforeDestroy
)、unmounted
(Vue 2 中是destroyed
) -
描述:
-
当组件即将被移除时,会进入卸载阶段。
-
beforeUnmount
:- 在组件实例即将被销毁前调用。
- 适合在此阶段执行清理工作,如移除事件监听器、清除定时器、取消订阅等。
-
unmounted
:- 在组件实例被销毁,并且 DOM 中的所有绑定和子组件也都被销毁后调用。
- 此时组件实例已经从 DOM 中完全移除。
-
总结
- 创建: 组件实例被创建,
beforeCreate
钩子执行。 - 初始化数据:
data
、methods
等初始化完成,created
钩子执行。 - 编译模板: Vue 将模板编译成虚拟 DOM,
beforeMount
钩子执行。 - 挂载 DOM: 虚拟 DOM 渲染为真实 DOM,并插入页面,
mounted
钩子执行。 - 更新渲染: 当数据变化时,组件重新渲染,
beforeUpdate
和updated
钩子分别在更新前后执行。 - 卸载: 组件即将销毁和已经销毁时,分别执行
beforeUnmount
和unmounted
钩子。