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


一、什么是 Vue 生命周期?

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

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


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

钩子 触发时机 典型用途
beforeCreate 实例刚被创建,data、methods 等尚未初始化 插件开发中做极早期初始化
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 是否就绪。

✅ 相同点:

  • 都能访问 this、data、methods、computed 等;
  • 都可以发起 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 是数据准备的最佳时机 ,mounted 是DOM 操作的安全时机;
  • 数据请求应尽量前置到 created,以提升首屏体验,避免不必要的 UI 闪烁。

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


✅ 参考文献



相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
一隅论数智3 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
XiHongShi20163 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
前端小万3 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
A黄俊辉A3 天前
uniapp webview中实现 app和内嵌的H5双向通信
vue.js·json
三十而立洋3 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
爱吃苹果的日记本3 天前
离散数学第六课
学习·离散数学