骨架屏应在created阶段启动、mounted前退场,避免白屏或闪烁;vue 3推荐suspense自动管理异步边界;骨架屏需轻量静态,纯css实现,列表限3–5条。

骨架屏不是等数据,而是“抢在白屏前占位”——关键在于状态切换的时机是否精准。Vue 应用初始化时,骨架屏必须在真实内容渲染前就出现,且要在数据就绪、DOM 可用后及时退场,否则会遮挡内容或造成闪烁。
created 阶段启动骨架屏,同步发起请求
组件实例一创建完成,响应式系统已就绪,但 DOM 尚未挂载。此时是触发异步请求 + 激活骨架屏的黄金节点:
- 在 data(Vue 2)或 ref(Vue 3)中初始设
loading: true - 在 created 中调用 API 方法,不等待 mounted
- 模板中用
v-if="loading"控制骨架屏显隐,安全无副作用
mounted 阶段不拉数据,专注 DOM 适配
mounted 已能访问真实 DOM,但若此时才开始请求,用户已看到空白容器或骨架屏突然闪出——首屏感知被人为延迟:
使用 `@ainative/vue-sdk` 为 Vue 3 应用添加 AI 聊天功能。适用于以下场景:(1) 安装 `@ainative/vue-sdk`,(2) 在 Vue 组件中使用 `useChat` 组合式函数,(3) 提供……
- 避免在 mounted 中发起主数据请求
- 适合做骨架屏微调:比如读取容器高度后动态设置占位块行高
- 用于初始化依赖 DOM 的第三方库(如 ECharts、地图控件)
Vue 3 推荐用 Suspense 管理异步边界
无需手动维护 loading 状态,把加载逻辑交给组件边界,更简洁可靠:
- 用 defineAsyncComponent 包裹真实内容组件(如 ProductList.vue)
- 外层套
,内置 <template></template>放骨架屏 - 组件加载、超时、错误均由 Suspense 自动协调,状态零耦合
骨架屏本身要轻量、静态、结构一致
它只负责“形似”,不参与逻辑,否则反而拖慢初始化:
- 用纯 CSS 实现:固定宽高 + 圆角 + 灰色背景模拟图文区块
- 列表页避免
v-for渲染大量骨架项,静态写死 3–5 条即可 - 响应式需求靠 class 切换(如
is-mobile),不用 JS 动态重排
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










