refactor: 重构 RouterContainer 组件以支持懒加载页面模块

- 移除不必要的 Suspense 组件,改为使用 LoadedPage 组件进行懒加载。
- 更新特性获取逻辑,使用 getFeatureByKey 函数替代直接查找。
- 新增 featureMeta.ts 文件,集中管理功能配置和相关方法。
- 实现 pageLoaders 以支持按需加载页面模块,提升性能和用户体验。
This commit is contained in:
2026-06-30 22:45:32 +08:00
parent d18ae5d41c
commit c7f4305fc3
17 changed files with 159 additions and 68 deletions
+13 -11
View File
@@ -67,19 +67,21 @@ describe('features 懒加载', () => {
expect(pageLoadTracker.loaded).toEqual([]);
});
it('渲染 lazy 组件时才应加载对应页面模块', async () => {
const React = await import('react');
const { render, waitFor } = await import('@testing-library/react');
const { FEATURES } = await import('@/config/features');
it('loadPage 应仅加载对应页面模块', async () => {
const { loadPage } = await import('@/config/pageLoaders/index');
const DashboardPage = FEATURES.find((f) => f.key === 'dashboard')!.component;
await loadPage('dashboard');
render(
React.createElement(React.Suspense, { fallback: null }, React.createElement(DashboardPage)),
);
expect(pageLoadTracker.loaded).toEqual(['Dashboard']);
});
await waitFor(() => {
expect(pageLoadTracker.loaded).toEqual(['Dashboard']);
});
it('loadPage 切换页面时不应加载无关页面模块', async () => {
const { loadPage } = await import('@/config/pageLoaders/index');
await loadPage('timestamp');
expect(pageLoadTracker.loaded).toEqual(['Timestamp']);
expect(pageLoadTracker.loaded).not.toContain('QrCode');
expect(pageLoadTracker.loaded).not.toContain('TestDataGenerator');
});
});