react如何按需加载
按需加载的实现方法
在React中实现按需加载(懒加载)可以通过以下几种方式:
使用React.lazy和Suspense
React 16.6及以上版本提供了原生支持的懒加载方案:

import React, { Suspense } from 'react';
const LazyComponent = React.lazy(() => import('./LazyComponent'));
function App() {
return (
<div>
<Suspense fallback={<div>Loading...</div>}>
<LazyComponent />
</Suspense>
</div>
);
}
路由级别的懒加载
配合React Router实现路由级别的按需加载:

import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import React, { Suspense } from 'react';
const Home = React.lazy(() => import('./routes/Home'));
const About = React.lazy(() => import('./routes/About'));
function App() {
return (
<Router>
<Suspense fallback={<div>Loading...</div>}>
<Switch>
<Route exact path="/" component={Home}/>
<Route path="/about" component={About}/>
</Switch>
</Suspense>
</Router>
);
}
动态导入(Dynamic Import)
使用Webpack的动态导入语法实现组件级懒加载:
import('./math').then(math => {
console.log(math.add(16, 26));
});
第三方库方案
使用loadable-components等第三方库:
import loadable from '@loadable/component';
const OtherComponent = loadable(() => import('./OtherComponent'), {
fallback: <div>Loading...</div>,
});
function MyComponent() {
return <OtherComponent />;
}
注意事项
- 确保开发环境配置了代码分割功能(如Webpack的SplitChunksPlugin)
- 为Suspense提供合适的fallback UI
- 避免在渲染函数中直接使用React.lazy,应在组件外部声明
- 对于SSR应用,考虑使用
@loadable/component等支持服务端渲染的解决方案
性能优化建议
- 预加载关键资源,非关键资源使用懒加载
- 合理设置Webpack的chunk分割策略
- 使用React.memo等优化手段减少不必要的重新渲染
- 考虑使用Intersection Observer API实现基于视口的懒加载






