VUE的生命周期钩子,vue2和vue3的生命周期钩子的核心差异

生命周期钩子(Lifecycle Hooks)是Vue框架中组件从创建到销毁的整个生命周期中,在特定阶段自动执行的函数,用于让开发者在组件的不同阶段(如初始化、挂载、更新、销毁等)插入自定义逻辑(如数据请求、事件监听、资源清理等)。

一、生命周期钩子的核心作用

组件像"有生命的物体"一样,会经历从"出生"(创建)到"运行"(更新)再到"死亡"(销毁)的过程。生命周期钩子就是在这些关键节点"插队"执行代码的机制,例如:

  • 组件刚创建时(created):初始化数据、发起接口请求。
  • 组件挂载到页面后(mounted):操作DOM、初始化第三方插件(如ECharts)。
  • 组件销毁前(beforeDestroy):清除定时器、解绑事件监听,避免内存泄漏。

二、Vue 2 和 Vue 3 都有生命周期钩子

在语法和部分钩子名称上有细微差异。

1. Vue 2 的生命周期钩子(选项式API)

Vue 2 使用选项式APIexport default { created() {}, mounted() {} })定义生命周期钩子,常用钩子及执行顺序如下:

钩子名称 执行时机 典型用途
beforeCreate 组件实例刚创建,数据和方法未初始化 几乎不用(无法访问datamethods
created 组件实例创建完成,数据和方法已初始化 发起接口请求、初始化数据
beforeMount 组件即将挂载到DOM,模板未渲染 准备DOM相关操作
mounted 组件已挂载到DOM,模板已渲染 操作DOM、初始化插件(如地图、图表)
beforeUpdate 数据更新后,DOM更新前 获取更新前的DOM状态
updated 数据更新后,DOM已重新渲染 处理更新后的DOM逻辑
beforeDestroy 组件即将销毁 清除定时器、解绑事件监听
destroyed 组件已销毁 最终清理工作(极少用)

示例(Vue 2)

javascript 复制代码
export default {
  data() {
    return { count: 0 };
  },
  created() {
    console.log('组件创建完成,可访问data:', this.count);
    this.fetchData(); // 调用方法发起请求
  },
  mounted() {
    console.log('组件已挂载到DOM:', this.$el); // 操作DOM
  },
  beforeDestroy() {
    clearInterval(this.timer); // 清除定时器
  },
  methods: {
    fetchData() { /* 接口请求逻辑 */ }
  }
};
2. Vue 3 的生命周期钩子(组合式API)

Vue 3 推荐使用组合式APIsetup函数),生命周期钩子需要vue中导入并在setup中调用 ,部分钩子名称略有调整(主要是destroyed相关),常用钩子及对应关系如下:

Vue 3 钩子(组合式) 对应Vue 2钩子 执行时机
onBeforeMount beforeMount 组件即将挂载
onMounted mounted 组件已挂载
onBeforeUpdate beforeUpdate 数据更新,DOM未更新
onUpdated updated 数据更新,DOM已更新
onBeforeUnmount beforeDestroy 组件即将销毁
onUnmounted destroyed 组件已销毁

示例(Vue 3)

javascript 复制代码
import { onMounted, onBeforeUnmount } from 'vue';

export default {
  setup() {
    let timer;

    onMounted(() => {
      console.log('组件已挂载');
      timer = setInterval(() => { /* 定时器逻辑 */ }, 1000);
    });

    onBeforeUnmount(() => {
      console.log('组件即将销毁');
      clearInterval(timer); // 清除定时器
    });

    return { /* 暴露给模板的数据 */ };
  }
};

三、Vue 2 和 Vue 3 生命周期钩子的核心差异

  1. 语法形式

    • Vue 2 是选项式 ,直接在组件选项中定义钩子函数(如created() {})。
    • Vue 3 是组合式 ,需要导入钩子函数(如import { onMounted })并在setup中注册。
  2. 销毁阶段的钩子名称

    • Vue 2 用 beforeDestroydestroyed
    • Vue 3 更名为 onBeforeUnmountonUnmounted(更贴合"卸载"的语义)。
  3. 执行上下文

    • Vue 2 钩子中通过 this 访问组件实例(如this.datathis.methods)。
    • Vue 3 组合式API中没有 this,直接使用setup中定义的变量和函数。

vue官网生命周期图

相关推荐
往事随风灬11 分钟前
我被 Volta 的“智能”坑了一下午:pnpm 为何无视项目 Node 版本?
前端·vue.js
如果超人不会飞13 分钟前
TinyVue Layout 组件完全指南:别再手写 float 和 flex 了,栅格早该这样用
vue.js
xiaofeichaichai15 分钟前
Tree Shaking
前端·javascript
lichenyang45315 分钟前
给 ArkTS 应用做一个内置的「Network 面板」:实时看清 SSE 每一帧和最后那张卡片
前端
倾颜18 分钟前
从手写 Runner 到 LangGraph:受控 Agent 接入 LangGraph
前端·后端·langchain
AI行业学习26 分钟前
CC-Switch v3.16.1 官方下载 | 安装配置详细教程【2026.6.10】
java·开发语言·vue.js·python·mysql·eclipse·html
UXbot26 分钟前
AI网页开发工具能替代工具吗?5大平台对比
前端·人工智能·低代码·ui·原型模式·web app
wuhen_n27 分钟前
从零到一!前端搭建本地轻量化 RAG 问答系统
前端·langchain·ai编程
落日漫游44 分钟前
代码报错难排查?借助Gemini快速修复
前端
niconicoC44 分钟前
让 Three.js 场景更真实:我用高斯泼溅和 SparkJS 做了一个可交互的 3D Demo
前端·webgl