Suspense 让组件在数据未就绪时「挂起」,向最近的 边界冒泡并显示 fallback,就绪后恢复渲染。React 本身不提供数据请求,需配合能桥接 Promise 的缓存层:React 19 的 use()、框架的路由 loader(Next.js/Remix)或 Relay/SWR 的 Suspense 模式。
正确模式是「渲染前尽早发起请求」:在 loader 或模块顶层创建 Promise 并缓存,渲染时解包;避免在 useEffect 里 fetch——那会造成瀑布式请求且与 Suspense 无关。易错点:渲染中新建 Promise 会无限挂起;挂起时默认用 fallback 替换旧 UI,配合 startTransition 可保留旧界面避免闪烁;错误要交给 ErrorBoundary 而非 try/catch。追问:Suspense 边界粒度如何设计、与 streaming SSR 的关系、并行请求如何组织。
<Suspense fallback={<Skeleton />}>
<Profile promise={profilePromise} />
</Suspense>