请描述下你对 Vue 生命周期的理解?在 `created` 和 `mounted` 中请求数据有什么区别?


一、什么是 Vue 生命周期?

Vue 生命周期指的是 一个组件实例从创建到销毁的全过程 。在这个过程中,Vue 会自动执行一系列初始化操作(如数据观测、模板编译、DOM 挂载等),并在特定阶段触发生命周期钩子函数,允许开发者在这些时机插入自定义逻辑。

就像一条流水线:每个"工人"(钩子)在任务流经自己岗位时执行特定工作。
⚠️ 注意:所有生命周期钩子的 this 都自动绑定到当前 Vue 实例,因此不能使用箭头函数 (否则 this 会指向外层作用域)。


二、Vue 的 8 个核心生命周期钩子

钩子 触发时机 典型用途
beforeCreate 实例刚被创建,datamethods 等尚未初始化 插件开发中做极早期初始化
created 实例已完成数据观测、属性/方法初始化,但 DOM 未生成 发起异步请求、初始化非 DOM 相关逻辑
beforeMount 模板已编译为 render 函数,虚拟 DOM 已创建,真实 DOM 未挂载 可访问 $el(原始挂载点),但内容未替换
mounted 真实 DOM 已挂载并渲染完成 操作 DOM、初始化第三方库(如 echarts)、获取元素尺寸
beforeUpdate 数据变化后,虚拟 DOM 重新渲染前 获取更新前的状态
updated 虚拟 DOM 重新渲染并真实 DOM 更新后 执行依赖 DOM 更新后的操作(慎用,避免无限循环)
beforeDestroy 实例销毁前,仍可访问所有属性和方法 清理定时器、取消订阅、解绑事件
destroyed 实例完全销毁,仅保留 DOM 节点(不会自动移除) 彻底释放资源

📌 补充(带 keep-alive 时):

  • activated:缓存组件被激活时调用
  • deactivated:缓存组件被停用时调用

三、created vs mounted:请求数据的区别

这是面试高频考点!核心区别在于 DOM 是否就绪

✅ 相同点:

  • 都能访问 thisdatamethodscomputed 等;
  • 都可以发起 AJAX 请求获取数据。

❗ 关键区别:

维度 created mounted
触发时机 实例创建完成,早于 DOM 渲染 DOM 已挂载并渲染完成
能否操作 DOM ❌ 不能($el 为原始挂载点或 undefined) ✅ 可以($el 是最终渲染的 DOM)
用户体验 数据在页面渲染前加载,无闪动 若数据较慢,可能先看到空白/默认 UI,再更新 → 可能出现"闪屏"
适用场景 推荐用于大多数数据请求(尤其不影响 DOM 结构的数据) 适用于必须等 DOM 存在才能发起的请求(极少见),或需结合 DOM 尺寸计算的场景

🎯 最佳实践建议:

  • 优先在 created 中请求数据
    因为它更早执行,能让数据在页面渲染前就位,避免用户看到"加载中"或空白状态。
  • 除非你需要 DOM 信息 (比如根据容器宽高请求不同尺寸的图片),否则不要等到 mounted 再发请求。

💡 举例:

如果你在 mounted 中请求用户信息,而模板中有 {``{ userInfo.name }},那么页面会先显示空值(或默认值),等请求回来才更新------这就是"闪动"。

而在 created 中请求,配合 v-if="userInfo",就能实现"数据准备好才渲染",体验更流畅。


四、总结

  • Vue 生命周期是理解组件行为的核心,每个钩子都有其明确职责;
  • created数据准备的最佳时机mountedDOM 操作的安全时机
  • 数据请求应尽量前置到 created,以提升首屏体验,避免不必要的 UI 闪烁。

这也是为什么 Vue 官方文档和社区普遍推荐:"能用 created,就不用 mounted 发请求"


参考文献



相关推荐
一点一木27 分钟前
深度体验TRAE SOLO移动端7天:作为独立开发者,我把工作流揣进了兜里
前端·人工智能·trae
天外飞雨道沧桑1 小时前
TypeScript 中 omit 和 record 用法
前端·javascript·typescript
yyyyy_abc1 小时前
ceph学习笔记
笔记·ceph·学习
Lee川1 小时前
mini-cursor 揭秘:从 Tool 定义到 Agent 循环的完整实现
前端·人工智能·后端
晓梦林1 小时前
ximai靶场学习笔记
android·笔记·学习
nashane2 小时前
HarmonyOS 6学习:外接键盘CapsLock与长截图功能的实战调试与完整解决方案
学习·华为·计算机外设·harmonyos
canonical_entropy2 小时前
从 Spec-Driven Development 到 Attractor-Guided Engineering
前端·aigc·ai编程
研☆香2 小时前
聊聊前端页面的三种长度单位
前端
一口吃俩胖子2 小时前
【脉宽调制DCDC功率变换学习笔记021】时域性能准则
笔记·学习
给钱,谢谢!3 小时前
React + PixiJS 实现果园成长页:从状态机到浇水动画
前端·react.js·前端框架