Vue 词条目录
前端Wiki/词条/Suspense 异步组件

Suspense 异步组件

定义在模板层用 fallback 占位内容等待异步组件加载就绪的内置组件

异步组件常见于代码分割与路由懒加载:组件资源还在网络上时,页面上该显示什么?Suspense 给出统一答案:它有两个插槽,default 放真正的异步组件,fallback 放加载中的占位内容。异步依赖全部就绪前只显示 fallback,全部就绪后才切换到 default,中间过程不需要手动管理 loading 状态。

Suspense 捕获的不只是异步组件的加载,还包括其中 await 的异步请求,配合 defineAsyncComponent 实现按需加载体验非常顺滑。它目前仍是实验性 API,错误处理要用 onErrorCaptured 兜底。路由场景里更常见的做法是路由自身配合加载动画,两种方案择其一即可。

HTML
<template>
  <suspense>
    <template #default><AsyncChart /></template>
    <template #fallback>
      <div class="loading">图表数据加载中,请稍候……</div>
    </template>
  </suspense>
</template>

<script setup>
import { defineAsyncComponent } from 'vue';
const AsyncChart = defineAsyncComponent(() => import('./HeavyChart.vue'));
</script>

<style scoped>
.loading { padding: 24px; color: #888; text-align: center; }
</style>
⚠ 常见误区
🔗 相关词条Teleport 与 Suspense路由守卫与懒加载
← 返回来源章节Teleport 与 Suspense