vue基础(五)

Vue 实例在创建、挂载、更新、销毁的过程中会触发一系列的生命周期钩子(Lifecycle Hooks),让开发者可以在不同阶段执行逻辑。

1. Vue 2 生命周期完整流程

生命周期的四个主要阶段

  1. 创建阶段(Creation)
  2. 挂载阶段(Mounting)
  3. 更新阶段(Updating)
  4. 销毁阶段(Destruction)

2. Vue 2 生命周期钩子(Hooks)

阶段 生命周期钩子 作用
创建前 beforeCreate 组件刚创建,还没有 data、methods、computed 等
创建后 created data、methods 已初始化,但 DOM 还未渲染
挂载前 beforeMount template 解析完毕,还未挂载到真实 DOM 上
挂载后 mounted 组件挂载到 DOM,可以操作 DOM
更新前 beforeUpdate data 变化,DOM 还未更新
更新后 updated data 变化,DOM 已更新
销毁前 beforeDestroy 组件即将销毁,可清理定时器、解绑事件
销毁后 destroyed 组件已销毁,所有子组件也被销毁

3. Vue 2 生命周期示例

html 复制代码
<template>
  <div>
    <h1>{{ message }}</h1>
    <button @click="changeMessage">修改消息</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: "Hello Vue!"
    };
  },
  methods: {
    changeMessage() {
      this.message = "Vue 生命周期演示";
    }
  },
  beforeCreate() {
    console.log("1. beforeCreate - data 还未初始化", this.message); // undefined
  },
  created() {
    console.log("2. created - data 初始化完成", this.message);
  },
  beforeMount() {
    console.log("3. beforeMount - 模板编译完成,尚未挂载");
  },
  mounted() {
    console.log("4. mounted - 组件已挂载到 DOM,可进行 DOM 操作");
  },
  beforeUpdate() {
    console.log("5. beforeUpdate - data 变化,DOM 还未更新", this.message);
  },
  updated() {
    console.log("6. updated - data 变化,DOM 已更新", this.message);
  },
  beforeDestroy() {
    console.log("7. beforeDestroy - 组件即将销毁,可清理定时器等");
  },
  destroyed() {
    console.log("8. destroyed - 组件已销毁");
  }
};
</script>

4. Vue 3 生命周期

Vue 3 依然有生命周期钩子,但使用 setup() 时需要使用 Vue 3 提供的 onXxx 形式的钩子(从 vue 引入)。

Vue 3 生命周期对比

Vue 2 Vue 3 (Composition API)
beforeCreate setup() 直接初始化
created setup() 直接初始化
beforeMount onBeforeMount
mounted onMounted
beforeUpdate onBeforeUpdate
updated onUpdated
beforeDestroy onBeforeUnmount
destroyed onUnmounted

Vue 3 生命周期示例

html 复制代码
<template>
  <div>
    <h1>{{ message }}</h1>
    <button @click="changeMessage">修改消息</button>
  </div>
</template>

<script>
import { ref, onMounted, onBeforeUnmount, onUpdated } from "vue";

export default {
  setup() {
    const message = ref("Hello Vue 3!");

    const changeMessage = () => {
      message.value = "Vue 3 生命周期演示";
    };

    onMounted(() => {
      console.log("组件已挂载");
    });

    onUpdated(() => {
      console.log("组件更新了");
    });

    onBeforeUnmount(() => {
      console.log("组件即将销毁");
    });

    return { message, changeMessage };
  }
};
</script>

5. 生命周期使用场景

钩子 适用场景
beforeCreate 组件初始化前,可用于 console.log 调试
created 获取 data,初始化 Vuex,发起 Ajax 请求
beforeMount 在 DOM 渲染前执行一些逻辑
mounted 获取 DOM,初始化 第三方库(如 ECharts)
beforeUpdate data 变化时,执行一些更新前的计算
updated DOM 更新后执行操作(如日志记录)
beforeDestroy 清除 setInterval、解绑 window 事件
destroyed 组件销毁后的清理操作

6. Vue 生命周期面试题

Q1: created 和 mounted 有什么区别?

钩子 执行时机 适用场景
created 组件实例创建完成,但 DOM 还未渲染 可用于获取 data、调用 Vuex
mounted 组件挂载到 DOM 后 适用于 DOM 操作,如 ECharts

📌 如果要操作 DOM,需要在 mounted 中进行。

Q2: beforeDestroy 用来做什么?

beforeDestroy 适用于:

  • 清除定时器
  • 解绑全局事件
  • 销毁第三方库
html 复制代码
beforeDestroy() {
  clearInterval(this.timer); // 清除定时器
  window.removeEventListener("resize", this.handleResize); // 解绑事件
}
相关推荐
IT_陈寒2 小时前
SpringBoot启动慢得像蜗牛?原来是这个配置在捣鬼
前端·人工智能·后端
计算机魔术师2 小时前
Muse Spark跑赢Gemini,但真正的底牌是这种设计
前端
雪芽蓝域zzs2 小时前
第4节:el-select 弹窗事件控制(打开 / 关闭、选中事件、弹窗滚动事件)
vue.js·elementui
PYB32 小时前
【Web·JS·基础】函数的使用和展运算符...objs
前端·javascript
指针向南2 小时前
Chrome读不了HEIC怎么办:原生解码和WASM两条路
前端·图像处理·人工智能·chrome·计算机视觉·wasm
默_笙3 小时前
🚥 给 RAG 装一台心电监护仪:LangSmith 全链路观测(上)
前端·javascript
前端snow4 小时前
ai agent --- mem0 外挂记忆系统
前端
变与不变8064 小时前
js同步和异步难点重点详解
开发语言·javascript·ecmascript
特立独行的猫a5 小时前
用仓颉写一个 Tauri:IPC 的每次往返实现原理(web层到仓颉层的触发过程)
前端·ui·harmonyos·tauri·鸿蒙·仓颉
Dovis(誓平步青云)5 小时前
多个链接不等于多份证据,新闻核验看板怎样合并来源
java·服务器·前端·javascript·人工智能·pdf·电脑