Vue生命周期小剧场:mounted和created到底谁先出场?

大家好,我是小杨,一个写了6年前端的老油条。今天咱们来聊聊Vue中经常被问到的生命周期钩子------createdmounted。这两个钩子看似简单,但新手很容易搞混。别担心,我会用最接地气的方式给大家讲明白!

先来个生活小例子

想象你在装修房子:

  • created阶段:就像房子刚建好框架,水电图纸都画好了,但还没开始装修
  • mounted阶段:就像家具都搬进去了,随时可以入住

正经技术解释

1. created:婴儿刚出生

javascript 复制代码
export default {
  created() {
    // 这里可以访问data里的数据
    console.log('组件诞生了!但还没见到DOM');
    this.fetchData(); // 通常我在这里发起异步请求
    
    // 举个栗子
    this.userList = ['张三', '李四'];
    console.log(this.userList); // 正常输出
  }
}

特点:

  • 组件"出生证"刚办好
  • 可以访问data、methods
  • 但DOM还没生成,所以别在这里操作DOM!
  • 适合做:初始化数据、发起API请求

2. mounted:装修完工

javascript 复制代码
export default {
  mounted() {
    // 这里可以操作DOM了
    console.log('组件已经挂载到页面上了');
    this.$refs.myButton.addEventListener('click', this.handleClick);
    
    // 举个栗子
    const myElement = document.getElementById('myDiv');
    console.log(myElement); // 现在能拿到了
  }
}

特点:

  • 组件已经"安家落户"
  • 可以操作DOM
  • 适合做:操作DOM、初始化第三方库(比如图表库)
  • 注意:这里发请求可能会比created慢一丢丢

超直观对比表

特性 created mounted
DOM准备好了吗 ❌ 还没出生 ✅ 已经安家
能操作DOM吗 ❌ 会报错 ✅ 随便玩
常用用途 初始化数据 操作DOM
异步请求 推荐在这里 也可以但不推荐

真实项目踩坑记

记得我刚学Vue时做过一个傻事:

javascript 复制代码
created() {
  // 我想在这里获取DOM元素...
  const el = document.querySelector('.my-class'); // 结果是null!
  console.log(el); // 输出null,当场懵逼
}

后来才明白,created阶段DOM根本不存在!这种操作必须放到mounted里。

什么时候用哪个?

用created:

  • 需要尽早获取数据
  • 需要初始化组件状态
  • 不需要操作DOM的计算

用mounted:

  • 需要操作DOM元素
  • 需要集成第三方库(比如初始化ECharts)
  • 需要获取元素尺寸/位置

性能小贴士

如果组件不需要操作DOM,优先用created发起请求,这样能更早获取数据。我曾经优化过一个列表页,把请求从mounted移到created,加载速度快了200-300ms!

总结

记住这个顺口溜:

"created生,mounted挂,

操作DOM要等挂,

数据初始化早出发,

性能优化顶呱呱!"

⭐ 写在最后

请大家不吝赐教,在下方评论或者私信我,十分感谢🙏🙏🙏.

✅ 认为我某个部分的设计过于繁琐,有更加简单或者更高逼格的封装方式

✅ 认为我部分代码过于老旧,可以提供新的API或最新语法

✅ 对于文章中部分内容不理解

✅ 解答我文章中一些疑问

✅ 认为某些交互,功能需要优化,发现BUG

✅ 想要添加新功能,对于整体的设计,外观有更好的建议

✅ 一起探讨技术加qq交流群:906392632

最后感谢各位的耐心观看,既然都到这了,点个 👍赞再走吧!

相关推荐
Asize4 分钟前
前端接口工程:axios + mock,前端不再傻等后端
前端·javascript
结网的兔子4 分钟前
【前端开发】UniApp 项目地图选型与Web-APP跨端迁移方案
前端·uni-app
张元清4 分钟前
React useElementSize Hook:用 ResizeObserver 实时追踪元素宽高 (2026)
javascript·react.js
Canace8 分钟前
给 Claude 一个链接,它真的读了原文吗
前端·人工智能·ai编程
爱丶不疚9 分钟前
Electron net 模块你可以没用过,但不能不知道
前端·electron
cidy_9810 分钟前
React + Ant Design 通用企业数据统计模块实战
前端
渣波13 分钟前
React 性能优化与状态管理双雄:useMemo 与 useReducer 深度解析
前端·javascript
Maxkim14 分钟前
把智能体塞进浏览器侧边栏:我在 MV3 里踩的 5 个坑
前端·后端
渣波14 分钟前
告别 LLM 幻觉:用 Harness 工程化思维打造生产级 AI 应用
前端·javascript
breeze jiang33 分钟前
React Todos 前端独立开发全解:用 vite-plugin-mock + axios 封装,再也不等后端接口
前端·react.js·状态模式