如何在 React 中实现组件的懒加载(Lazy Loading)以优化首屏加载性能?
如何在 React 中实现组件的懒加载(Lazy Loading)以优化首屏加载性能?
回答与解析:
在 React 中,可以使用 React.lazy() 和 Suspense 来实现组件的懒加载,从而将组件的代码分割(code-splitting)并按需加载,减少初始 bundle 体积,提升首屏加载速度。
实现方式:
import React, { lazy, Suspense } from 'react';
// 使用 lazy 动态导入组件
const LazyComponent = lazy(() => import('./LazyComponent'));
function App() {
return (
<div>
<Suspense fallback={<div>Loading...</div>}>
<LazyComponent />
</Suspense>
</div>
);
}
关键点解析:
-
React.lazy():接收一个动态 import() 函数,返回一个 Promise,该 Promise resolve 时需导出一个默认组件(default export)。因此被懒加载的组件必须使用 default export 导出。
-
Suspense:用于包裹懒加载组件,在组件加载完成前显示 fallback 内容(如加载指示器)。一个 Suspense 可包裹多个懒加载组件。
-
路由级懒加载:在使用 React Router 时,通常对路由组件进行懒加载:
const Home = lazy(() => import('./pages/Home')); const About = lazy(() => import('./pages/About')); function App() { return ( <Router> <Suspense fallback={<div>Loading...</div>}> <Routes> <Route path="/" element={<Home />} /> <Route path="/about" element={<About />} /> </Routes> </Suspense> </Router> ); } -
注意事项:
- 不支持服务端渲染(SSR),如需 SSR 应使用 loadable-components 等库。
- 避免在循环或条件判断中使用 lazy,应将其定义在模块顶层。
通过懒加载,应用可显著减少初始加载的 JavaScript 体积,提升用户体验,尤其适用于大型应用或路由较多的场景。

发表评论 (审核通过后显示评论):