请描述下你对 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 发请求"


参考文献



相关推荐
世人万千丶19 小时前
Flutter 框架跨平台鸿蒙开发 - 恐惧清单应用
学习·flutter·华为·开源·harmonyos·鸿蒙
yuzhuanhei19 小时前
Visual Studio 配置C++opencv
c++·学习·visual studio
于慨19 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
石小石Orz19 小时前
油猴脚本实现生产环境加载本地qiankun子应用
前端·架构
从前慢丶19 小时前
前端交互规范(Web 端)
前端
像我这样帅的人丶你还19 小时前
别再让JS耽误你进步了。
css·vue.js
@yanyu66619 小时前
07-引入element布局及spring boot完善后端
javascript·vue.js·spring boot
CHU72903519 小时前
便捷约玩,沉浸推理:线上剧本杀APP功能版块设计详解
前端·小程序
GISer_Jing19 小时前
Page-agent MCP结构
前端·人工智能
王霸天19 小时前
💥别再抄网上的Scale缩放代码了!50行源码教你写一个永不翻车的大屏适配
前端·vue.js·数据可视化