异步组件、Suspense、错误状态怎么配合?

先理解原理和示例,再练习完整口述与追问。

异步组件用于延后加载;Suspense 用于协调特定异步依赖并展示 fallback,不能把任意请求都自动变成其依赖。异步加载失败、超时、重试与业务错误要分别设计。

异步组件解决组件代码按需加载,可配置加载中、错误、延迟与超时;Suspense 协调其支持的异步依赖与 fallback,但并非任意 mounted 里发出的请求都会自动纳入。普通接口数据仍需有明确 loading/error/empty 状态。错误展示、重试次数和缓存复用要区分“代码下载失败”和“业务请求失败”。

路由首次下载一个大型图表组件时显示骨架,下载失败提示重试;图表组件内部请求数据失败则显示数据错误,不应一直保留代码加载骨架。多个独立面板可以局部加载,避免一个非关键组件阻止整页。重试前判断离线、版本失配还是服务器错误,设置次数上限。

Vue3 Suspense 的状态与稳定性需按所用版本核对。错误边界不代替所有异步 catch,已有页面也不应为一个延迟加载组件强行整体重挂载。

异步组件把组件代码加载延后,并可配置加载和错误呈现。Vue3 的 Suspense 主要协调 async setup、异步组件等可识别的依赖,等待时显示 fallback,不能把所有组件请求自动纳入。加载代码失败、接口业务失败与超时要分别有提示和重试。Vue3 官方仍将 Suspense 标为实验性功能,采用时应考虑项目约束。官方 Suspense 说明

面试官可能继续问追问与完整解答展开收起

为什么 mounted 里发请求,外层 Suspense 不一定显示预期 loading?当前项目对 Suspense 的支持和稳定性如何?

mounted 中发起的普通请求不是 Suspense 自动追踪的 setup 异步依赖,所以不会因为外面包了 Suspense 就自动显示对应 loading。要么采用其支持的异步依赖组织方式,要么明确维护业务 loading/error,不需要强行把所有请求改成挂起。