当前位置: 首页 > news >正文

React-router v7 配置 Suspense+lazy fallback第二次不显示

最近这个项目为了使用户交互更加友好,每个页面路由都采用了lazyload的方式进行加载,分离js以使按需进行加载,其中,我将 Suspense 封装进入了一个函数,通过函数返回对应内容:

export const LazyImport: React.FC<{ lazy: LazyExoticComponent<ComponentType> }> = ({ lazy: Component }) => {
  return (
    <Suspense fallback={<PageLoader />}>
      <Component />
    </Suspense>
  );
};
export const appRouters: RouteObject[] = [
  {
    path: 'dashboard',
    element: <LazyImport lazy={lazy(() => import('@/pages/Dashboard'))} />,
  },
  {
    path: 'order',
    element: <LazyImport lazy={lazy(() => import('@/pages/Order/order'))} />,
  }
]

之前的效果是这样:在第一次进入仪表盘页面,关于仪表盘页面的PageLoader组件会在合适的区域显示出来,但是,切换到其他页面的时候,PageLoader组件将不会在加载过程中展示。

原本的思路很简单,将重复的代码进行统一的的实现,其他地方就可以使用了,错就错在没有过多的考虑React渲染模式对于React来说,组件的相同会导致其更新时尝试复用组件(节省开销),就像是我们循环遍历出来新的动态组件一样,我们要保持循环出来的每个组件都是全新的话,就需要给每一个组件添加一个不同的 key,这样的话,React在进行渲染的时候,每个LazyImport组件都是全新的,而不是复用旧的。

给每次调用LazyImport都加个不同的Key:

let _suspenseKey = 0;
export const LazyImport: React.FC<{ lazy: LazyExoticComponent<ComponentType> }> = ({ lazy: Component }) => {
  _suspenseKey++;
  return (
    <Suspense key={_suspenseKey} fallback={<PageLoader />}>
      <Component />
    </Suspense>
  );
};

完美解决

Pasted image 20251111172714

这个问题说简单也简单,就是脑袋里默认会觉得这么小的事情应该不会影响到这个,所以在遇到这种问题的时候往往第一时间想不到是这个,细心很重要。

作者近期使用React和Nest做了个开源的ERP/CRM系统在Github(https://github.com/luutuu/luutuu-erp)

欢迎各位通过以下方式一起交流

  • github 的 issue
  • 邮箱联系 lutultd@163.com
http://www.jsqmd.com/news/37725/

相关文章:

  • spark read mongodb拉取的数据行数和源库不一致
  • PV 与 PVC 的“绑定”动作真正发生的时间点
  • 2025日本留学中介推荐:留学申请与语言学习一站式解决
  • 2025年11月高温老化房及环境试验设备推荐厂家:步入式恒温试验室/步入式高低温湿热试验室/大型高低温湿热试验室/汽车零部件、逆变器、电子元器件等场景适用
  • 【ACM出版 | 最快会后4个月检索 | 往届均已成功见刊并被EI检索】第三届人工智能、系统与网络安全国际学术会议 (AISNS 2025)
  • it的尽头是炒股
  • Windows 电脑 FTP 服务器配置
  • [量化01 线形 ]
  • 护栏碰撞报警系统工作原理是什么?传感器+数据传输全解析
  • 2025抗老面霜爆款推荐:功效全面升级,从 “成分堆砌” 到 “体系抗老”
  • AI 在数据库操作中的各类应用场景、方案与实践指南 - 指南
  • 国标GB28181算法算力平台EasyGBS:构建智慧鱼塘养殖远程监控与智能预警一体化方案
  • 2025年环境试验设备最新推荐厂家,高温老化房、高低温湿热试验室、步入式试验室、汽车零部件老化房
  • React系列教程:10. Button组件示例
  • 2025年11月德语学习课程推荐:德企定制化培训,高性价比职场首选
  • 金风科技通过校企合作、职业培训和数字化平台的多元化培养体系培养新一代风电行业人才
  • 阿里云 Maven 仓库
  • 2025年11月油烟机品牌对比:海信领衔五强排行全评价
  • 为什么我们很难“举一反三”?
  • 深度学习模型CNN识别恶意软件
  • 【251111】CF2161 Div.1+2 vp 总结
  • 代码实例:Python 爬虫抓取与解析 JSON 数据 - 实践
  • charles问题排查
  • 2025年11月深圳近视手术医生评测榜:五位口碑医师排行解析
  • 2025年11月深圳近视手术医生榜单:五强对比与权威数据解读
  • 2025年纸板桶生产厂家权威推荐榜单:方纸桶/生产纸板/全纸桶源头厂家精选
  • Request
  • 吹风机激光测距感应温度调节方案
  • 2025年11月上海老房翻新公司推荐榜:十强资质与用户评价对比
  • 2025年11月上海老房翻新公司排名榜:十家口碑对比与选择指南