当前位置: 首页 > article >正文

Vue 生命周期函数

Vue 的生命周期是指 Vue 实例从创建到销毁的过程。生命周期中的各个钩子函数让我们可以在 Vue 实例的不同状态下执行特定的操作。了解生命周期有助于在合适的时机执行数据初始化、资源清理等操作,提高应用的效率和性能。

以下是 Vue 组件的完整生命周期流程,以及各个钩子函数的作用:

1. Vue 生命周期流程概述

Vue 生命周期从实例创建到销毁大致可以分为四个阶段:

  • 创建阶段:实例被创建,数据和事件被初始化。
  • 挂载阶段:实例挂载到页面,模板渲染成真实的 DOM。
  • 更新阶段:数据变化导致组件重新渲染。
  • 销毁阶段:组件销毁,解绑事件,清理资源。

2. Vue 生命周期钩子函数及其用途

下面是各个生命周期钩子函数的作用和典型用法:

创建阶段
  1. beforeCreate

    • 在实例初始化之后、数据观测和事件配置之前调用。
    • 此时 datamethods 中的数据尚未初始化。
    • 常用场景:无法在此钩子中访问 datacomputed 等,因此较少使用。
  2. created

    • 在实例创建完成后立即调用,此时已经可以访问 datamethods
    • 常用场景:用于请求初始化数据、在实例加载时执行某些任务。
    • 注意:此时模板尚未渲染,DOM 结构还不可用。
    created() {
      console.log("实例已创建,data 可访问:", this.someData);
      this.fetchData();
    }
    
挂载阶段
  1. beforeMount

    • 在挂载开始之前调用,此时 template 模板已经编译。
    • 常用场景:在即将挂载时执行最后的修改,但通常较少使用。
    • 注意:此时 DOM 还未挂载。
  2. mounted

    • 在挂载结束后调用,此时组件 DOM 已生成并被渲染。
    • 常用场景:获取 DOM 元素进行操作,或依赖 DOM 的第三方库(如图表、动画等)。
    • 注意:只会在初次挂载时执行一次。
    mounted() {
      console.log("组件已挂载到 DOM,可以操作 DOM 元素了");
      this.initializeChart();
    }
    
更新阶段
  1. beforeUpdate

    • 在数据变化、更新渲染之前调用。
    • 常用场景:在虚拟 DOM 重新渲染之前执行一些操作,通常用于调试。
  2. updated

    • 在重新渲染和更新 DOM 后调用。
    • 常用场景:当数据更新导致 DOM 变化时,执行一些依赖于 DOM 变化的操作。
    • 注意:不建议在此钩子中直接操作数据,可能导致无限更新循环。
    updated() {
      console.log("组件已更新");
      this.updateChartData();
    }
    
销毁阶段
  1. beforeDestroy

    • 在实例销毁之前调用,此时实例仍然完整可用。
    • 常用场景:清理定时器、移除事件监听等。
  2. destroyed

    • 实例销毁后调用,所有事件监听、子实例等都会被移除。
    • 常用场景:执行彻底的资源清理,避免内存泄漏。
    beforeDestroy() {
      console.log("即将销毁实例,清理定时器和事件");
      clearInterval(this.timer);
    },
    destroyed() {
      console.log("实例已销毁,资源已清理");
    }
    

3. 生命周期钩子调用顺序

Vue 实例的生命周期钩子调用顺序如下:

  1. 创建阶段beforeCreatecreated
  2. 挂载阶段beforeMountmounted
  3. 更新阶段beforeUpdateupdated(每次数据更新都会触发)
  4. 销毁阶段beforeDestroydestroyed

4. 生命周期钩子图示

                 创建阶段               挂载阶段               更新阶段              销毁阶段
                +----------+         +------------+        +-----------+          +---------+
                |beforeCreate|       | beforeMount |       |beforeUpdate|         |beforeDestroy|
                +----------+         +------------+        +-----------+          +---------+
                       |                   |                     |                      |
                       V                   V                     V                      V
                +----------+         +-----------+         +---------+          +---------+
                | created |        | mounted |         | updated  |          | destroyed |
                +----------+         +-----------+         +---------+          +---------+

5. 常见生命周期钩子的使用场景总结

  • created:在组件初始化时,适合进行数据请求、初始化数据等。
  • mounted:在组件挂载后,适合 DOM 操作、依赖 DOM 的第三方库(如图表、动画)。
  • beforeUpdateupdated:在组件更新前后,适合在数据改变引起 DOM 变化时进行操作(如调试或调节)。
  • beforeDestroydestroyed:在组件销毁时,适合清理事件监听、定时器,释放不再需要的资源。

掌握 Vue 的生命周期钩子,可以帮助在应用中更合理地安排任务,提高性能。


http://www.kler.cn/a/393105.html

相关文章:

  • SpringBoot参数注解
  • HAproxy 详解
  • 使用etl工具kettle的日常踩坑梳理之二、从Hadoop中导出数据
  • Qt_day4_Qt_UI设计
  • LabVIEW开发相机与显微镜自动对焦功能
  • 深入解析 OpenHarmony 构建系统-4-OHOSLoader类
  • 可认证数据资产合约标准协议(CMIDA-1)意见征集
  • 06.VSCODE:备战大项目,CMake专项配置
  • PcVue + SQL Grid : 释放数据的无限潜力
  • 堆排序与链式二叉树:数据结构与排序算法的双重探索
  • 【STM32F1】——无线收发模块RF200与串口通信
  • 使用Java绘制图片边框,解决微信小程序map组件中marker与label层级关系问题,label增加外边框后显示不能置与marker上面
  • go reflect 反射
  • 若依笔记(八):芋道的Docker容器化部署
  • 什么是 ISP:了解互联网服务提供商的作用
  • Vue 3 在现代前端开发中的应用
  • 【大数据学习 | HBASE高级】hbase的参数优化
  • 【Linux】linux编辑器-vim的命令及配置
  • Qt_day5_常用类
  • 图像处理实验四(Adaptive Filter)
  • 华为eNSP:MSTP
  • TensorFlow 2.0 环境配置
  • 常见git命令记录
  • 要查看你的系统是 x64(64位)还是 x86(32位),可以按照以下步骤操作
  • python高级之面向对象编程
  • 并发编程(10)——内存模型和原子操作