代码拆分
Rspack 支持代码分割特性,允许让你对代码进行分割,控制生成的资源体积和资源数量来获取资源加载性能的提升。
Rspack - 代码分割
懒加载组件
通常,我们使用静态 import 来导入组件:
import LazyComponent from './LazyComponent.jsx';
export function App() {
return (
<view>
<LazyComponent />
</view>
);
}
如果要将“加载组件代码”延迟至该组件被渲染时,可以将此 import 替换为:
- import LazyComponent from './LazyComponent.jsx'
+ import { lazy } from '@lynx-js/react'
+ const LazyComponent = lazy(() => import('./LazyComponent.jsx'))
此代码依赖于动态 import()。使用此模式要求导入的懒加载组件必须作为默认导出(Default Export)进行导出。
现在,由于你的组件代码按需加载,你还需要指定在加载期间应显示的内容。你可以通过将懒加载组件或其任何父组件包装在 <Suspense> 边界中来实现这一点:
src/App.tsx
import { Suspense, lazy } from '@lynx-js/react';
const LazyComponent = lazy(() => import('./LazyComponent.jsx'));
export function App() {
return (
<view>
<Suspense fallback={<text>Loading...</text>}>
<LazyComponent />
</Suspense>
</view>
);
}
按需懒加载
在此示例中,LazyComponent 的代码在尝试渲染它之前不会被加载。如果 LazyComponent 尚未加载,则会在其位置显示“Loading...”。例如:
src/App.tsx
import { Suspense, lazy, useState } from '@lynx-js/react';
const LazyComponent = lazy(() => import('./LazyComponent.jsx'));
export function App() {
const [shouldDisplay, setShouldDisplay] = useState(false);
const handleClick = () => {
setShouldDisplay(true);
};
return (
<view>
<view bindtap={handleClick}>Load Component</view>
{shouldDisplay && (
<Suspense fallback={<text>Loading...</text>}>
<LazyComponent />
</Suspense>
)}
</view>
);
}
错误处理
使用 ErrorBoundary
如果加载完成,懒加载组件本质上也是一个 React 组件,因此 React 中的错误处理实践仍然适用。
细节请参考 React - Catching rendering errors with an error boundary
懒加载独立项目
你还可以延迟加载在独立的 Rspeedy 项目中构建的模块。
术语表
- 生产者:一个向其他 Lynx 应用程序提供模块以供使用的应用程序。
- 消费者:一个从其他生产者中消费模块的应用程序。