Vue 3 中 Suspense 不生效是怎么回事?
我在用 Vue 3 的 Suspense 包裹一个异步组件,但页面一直显示默认内容,fallback 根本没触发。明明组件里用了 await 获取数据,也返回了 Promise,但 Suspense 好像完全没起作用。
我试过把 setup() 改成 async,也确认了子组件是通过 defineAsyncComponent 引入的,但还是不行。是不是哪里写错了?
<template>
<Suspense>
<template #default>
<AsyncUserProfile />
</template>
<template #fallback>
<div>加载中...</div>
</template>
</Suspense>
</template>
解决办法很简单,把异步逻辑直接提到 setup 顶层去 await。
如果你是 Options API,子组件得这么写:
如果你是
语法糖,也是同理,直接在顶层写const data = await ...。只要 setup 没有挂起,Suspense 的 fallback 就永远不会出来。改一下代码逻辑位置就行。