Suspense 和 lazy 是 React 的代码分割和异步加载解决方案。

示例 1: Suspense 基本用法

<Suspense fallback={<LoadingSkeleton />}>
  <UserProfile />
</Suspense>

示例 2: lazy 代码分割

点击上方按钮加载组件
const LazyChart = lazy(() => import('./ChartComponent'));

<Suspense fallback={<Loading />}>
  <LazyChart />
</Suspense>
说明: 每个组件只在首次点击时加载,后续切换使用缓存。 观察网络请求可以看到代码分割的效果。

示例 3: 嵌套 Suspense 边界

🏠 Header 组件

📑 Sidebar 组件

  • • 导航项 1
  • • 导航项 2
  • • 导航项 3

📄 Content 组件

这是主要内容区域...

注意: 每个区域独立加载,Header 最先出现(0.5s), 然后是 Sidebar(1.5s),最后是 Content(2.5s)。

示例 4: 预加载组件

// 预加载函数
const preload = () => import('./HeavyComponent');

<button
  onMouseEnter={preload}  // 悬停时预加载
  onClick={show}          // 点击时显示
>
  显示组件
</button>

示例 5: useTransition 与 Suspense

关于我

一名热爱编程的开发者,专注于 React 和 TypeScript。

优势: useTransition 让切换时保持旧内容可见(变暗), 而不是立即显示 fallback,提供更好的用户体验。