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

Vue的生命周期

Vue的生命周期

Vue的生命周期钩子函数可以分为四个主要阶段:创建(Creation)挂载(Mounting)更新(Updating)销毁(Destruction)。以下是各阶段的钩子函数及其作用,以Vue 3为主,同时对比Vue 2的差异:


一、创建阶段(Creation)

  1. beforeCreate

    • 触发时机:实例初始化后,数据观测(data)和事件配置(methods之前
    • 用途:一般用于插件初始化(如Vuex状态注入),此时无法访问 datamethods 等。
    • Vue 3差异:在Composition API中,setup() 替代了 beforeCreatecreated
  2. created

    • 触发时机:实例创建完成,数据观测和事件配置完成,但DOM未生成。
    • 用途:可访问 datamethods,常用于异步请求数据或初始化非DOM相关操作。

二、挂载阶段(Mounting)

  1. beforeMount

    • 触发时机:模板编译完成,但尚未将生成的DOM挂载到页面。
    • 用途:极少使用,一般用于服务端渲染(SSR)。
  2. mounted

    • 触发时机:DOM挂载完成,页面渲染完毕。
    • 用途操作DOM(如初始化图表库)、绑定第三方插件(如地图SDK)。
    • 注意:若子组件需要等待父组件挂载完成,需使用 $nextTick

三、更新阶段(Updating)

  1. beforeUpdate

    • 触发时机:数据变化后,DOM重新渲染
    • 用途:获取更新前的DOM状态(如滚动位置),对比新旧数据。
  2. updated

    • 触发时机:DOM重新渲染完成。
    • 用途:DOM更新后的操作(如更新第三方库)。
    • 注意:避免在此钩子中修改数据,可能导致无限循环。

四、销毁阶段(Destruction)

  1. beforeUnmount(Vue 2中为 beforeDestroy

    • 触发时机:实例销毁
    • 用途清理资源(如移除事件监听、清除定时器、取消未完成的请求)。
  2. unmounted(Vue 2中为 destroyed

    • 触发时机:实例销毁完成,所有子组件也被销毁。
    • 用途:极少操作,用于确认销毁后的状态。

五、其他特殊钩子

  1. activated / deactivated

    • 用途:与 <keep-alive> 组件结合,缓存组件状态(如页面返回时恢复滚动位置)。
    • 示例
      activated() {
        this.startAutoRefresh(); // 恢复定时任务
      },
      deactivated() {
        this.stopAutoRefresh(); // 暂停定时任务
      }
      
  2. errorCaptured

    • 用途:捕获子孙组件的错误(类似React的Error Boundary)。
    • 示例
      errorCaptured(err, vm, info) {
             
        console.error('捕获到错误:', err);
        return false; // 阻止错误继续向上传播
      }
      

Vue 3的Composition API变化

  • setup() 函数替代了 beforeCreatecreated
  • 生命周期钩子前缀 on(需显式导入):
    import {
          onMounted, onUnmounted } from 'vue';
    
    setup() {
         
      onMounted(() => {
         
        console.log('组件已挂载');
      })

相关文章:

  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_param
  • FreeRTOS(7)队列集
  • Redis 主从复制详解:实现高可用与数据备份
  • 【MySQL - 表的内外连接】
  • 【13】单片机编程核心技巧:乘法运算
  • 《Python全栈开发》第2课:HTML骨架搭建 - 从零编写个人简历页面
  • 数字IC后端设计实现教程 |Innovus ICC2 Routing Pin Access Setting设置方法
  • 第十五届蓝桥杯大学B组(握手问题、小球反弹、好数)
  • ChatGPT课件分享(37页PPT)
  • 【亲测有效】Mac系统升级或降级Node.js版本,Mac系统调整node.js版本
  • 【3D视觉学习笔记1】针孔相机模型与坐标系变换
  • 【Azure 架构师学习笔记】- Azure Databricks (17) --Delta Live Table和Delta Table
  • 面试之《webpack从输入到输出经历了什么》
  • 基础网络安全-K8S 配置Ingress-controller 通过HTTPS处理服务请求
  • GB8599-2023标准测试包/小规格测试包/标准生物测试包1.5kg/满负载织物7.5kg/不锈钢金属测试包/空腔负载试验的过程挑战装置(PCD)
  • Linux网络编程之——网络初认识
  • 启智畅想的集装箱号码识别技术,效率与技术的完美结合
  • [杂学笔记] TCP和UDP的区别,对http接口解释 , Cookie和Session的区别 ,http和https的区别 , 智能指针 ,断点续传
  • AF3 shaped_categorical函数解读
  • 大数据hadoop课程笔记
  • 上海黄浦:新婚夫妻来登记可“摇号”定制无人机表演,每周三对
  • 中信银行资产管理业务中心原副总裁罗金辉一审被控受贿超4437万
  • 专家:炎症性肠病发病率上升,需加强疾病早期诊断
  • 上博东馆常设陈列入选全国博物馆“十大精品”
  • 新时代,新方志:2025上海地方志论坛暨理论研讨会举办
  • 女生“生理期请病假要脱裤子证明”?高校回应:视频经处理后有失真等问题