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


参考文献



相关推荐
无限大62 小时前
用三行代码实现圣诞树?别逗了!让我们来真的
前端·javascript
代码游侠2 小时前
应用——UDP Socket 编程笔记
linux·运维·网络·笔记·网络协议·学习·udp
init_23612 小时前
label-route-capability
服务器·前端·网络
拉姆哥的小屋2 小时前
深度剖析SentiWordNet情感词典:155,287单词的情感世界
前端·javascript·easyui
T___T2 小时前
从 0 搭建 React 待办应用:状态管理、副作用与双向绑定模拟
前端·react.js·面试
YJlio2 小时前
Windows Sysinternals 文件工具学习笔记(12.10):PendMoves + MoveFile 实战——重启后文件替换的安全姿势
windows·笔记·学习
知识分享小能手2 小时前
Ubuntu入门学习教程,从入门到精通, Ubuntu 22.04 文件和目录管理完全指南(7)
linux·学习·ubuntu
De-Alf2 小时前
Megatron-LM学习笔记(5)Model Linear线性层
笔记·学习·ai
林太白2 小时前
vue3这些常见指令你封装了吗
前端·javascript