Vue 3 生命周期钩子详解(含组合式 API 对比)

Vue 3 生命周期钩子详解(含组合式 API 对比)

Vue 3 的生命周期钩子经历了显著优化,与 Vue 2 相比,移除了 beforeCreatecreated,并通过 组合式 API 提供了更灵活的逻辑组织方式。以下是完整生命周期图谱、组合式 API 对比及流程图:

一、生命周期阶段与钩子函数
阶段选项式 API(Vue 2 风格)组合式 API(Vue 3 风格)触发时机典型用途
创建阶段beforeCreate, createdsetup()组件实例初始化时注册响应式数据、方法
挂载阶段beforeMount, mountedonBeforeMount, onMounted模板编译/渲染前后DOM 操作、第三方库初始化
更新阶段beforeUpdate, updatedonBeforeUpdate, onUpdated响应式数据变化触发重新渲染前后更新后操作(如滚动条定位)
卸载阶段beforeUnmount, unmountedonBeforeUnmount, onUnmounted组件卸载前后清除定时器、事件监听
错误处理errorCapturedonErrorCaptured组件树中发生错误时错误日志记录、降级处理
调试专用-onRenderTracked, onRenderTriggered响应式依赖变化时性能优化、依赖追踪
二、组合式 API 使用方式
import {
  onMounted,
  onUnmounted,
  onRenderTriggered
} from 'vue';

export default {
  setup() {
    // 模拟数据获取
    const fetchData = () => {
      console.log('Fetching data...');
    };

    // 挂载时执行
    onMounted(() => {
      fetchData();
      window.addEventListener('resize', handleResize);
    });

    // 卸载时清理
    onUnmounted(() => {
      window.removeEventListener('resize', handleResize);
    });

    // 调试响应式依赖
    onRenderTriggered((event) => {
      console.log('Dependency changed:', event.key);
    });

    return { /* 暴露给模板的响应式数据 */ };
  }
};
三、关键变化与最佳实践
1. setup() 替代 beforeCreate/created
  • 原因:组合式 API 将初始化逻辑集中到 setup(),无需单独钩子。
  • 等价关系
    // Vue 2
    export default {
      created() {
        this.fetchData();
      }
    }
    
    // Vue 3
    import { onMounted } from 'vue';
    export default {
      setup() {
        onMounted(() => {
          fetchData();
        });
      }
    }
    
2. 新增调试钩子
  • onRenderTracked:跟踪所有触发重新渲染的响应式依赖。
  • onRenderTriggered:精确捕获导致更新的特定依赖。
  • 使用场景
    import { onRenderTriggered } from 'vue';
    onRenderTriggered((event) => {
      console.log('Updated by:', event.key); // 输出类似 "data: count"
    });
    
3. 与服务端渲染(SSR)的集成
  • 客户端专属钩子
    import { onMounted } from 'vue';
    onMounted(() => {
      // 仅在客户端执行
      console.log('Client-side only code');
    });
    
四、生命周期流程图

在这里插入图片描述

引用:https://cn.vuejs.org/assets/lifecycle_zh-CN.W0MNXI0C.png

五、选型建议表
场景推荐钩子核心操作
初始化数据/方法setup()注册 ref/reactive,定义方法
DOM 操作/API 调用onMounted操作真实 DOM,调用浏览器 API
清理定时器/事件监听onUnmounted执行 clearTimeout,移除监听器
性能优化分析onRenderTriggered定位高频更新依赖,优化响应式逻辑
六、与 Vue 2 的核心差异
特性Vue 2Vue 3改进点
钩子数量8 个核心钩子10 个核心钩子 + 2 个调试钩子增强调试能力
组合式 API需手动拆分逻辑天然支持逻辑聚合提升代码可维护性
TypeScript 支持部分类型推导全类型覆盖减少类型错误

通过掌握 Vue 3 的生命周期钩子,您可以更精准地控制组件行为,特别是在组合式 API 中实现逻辑复用和性能优化。新增的调试钩子为复杂应用提供了重要的性能分析手段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值