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官网生命周期图

相关推荐
IT_陈寒6 小时前
Vue3性能翻倍秘籍:5个Composition API技巧让你的应用快如闪电⚡
前端·人工智能·后端
Dontla6 小时前
npm install命令介绍
前端·npm·node.js
天天向上10246 小时前
在 Vue3 项目中使用 el-tree
javascript·vue.js·elementui
天天向上10246 小时前
vue2 vue3 修改elementUI和elementPlus主题颜色
前端·javascript·elementui
Zhangzy@6 小时前
Rust Workspace 构建多项目体系
开发语言·前端·rust
通往曙光的路上6 小时前
day23_密码加密 前端验证码 监听器 svn版本控制
前端·svn
TivonaLH6 小时前
v-code-diff入口文件的配置
前端·javascript·vue.js
青衫码上行7 小时前
【Java Web学习 | 第四篇】CSS(3) -背景
java·前端·学习
.生产的驴7 小时前
React 路由权限跳转 Token判断 路由控制 登录状态控制
前端·javascript·react.js·ajax·前端框架·c#·ecmascript