当前位置: 首页 > 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.zskr.cn/news/46689.html

相关文章:

  • 2025年11月高温老化房及环境试验设备推荐厂家:步入式恒温试验室/步入式高低温湿热试验室/大型高低温湿热试验室/汽车零部件、逆变器、电子元器件等场景适用
  • Windows 电脑 FTP 服务器配置
  • 2025抗老面霜爆款推荐:功效全面升级,从 “成分堆砌” 到 “体系抗老”
  • 国标GB28181算法算力平台EasyGBS:构建智慧鱼塘养殖远程监控与智能预警一体化方案
  • 2025年环境试验设备最新推荐厂家,高温老化房、高低温湿热试验室、步入式试验室、汽车零部件老化房
  • React系列教程:10. Button组件示例
  • 阿里云 Maven 仓库
  • 2025年11月油烟机品牌对比:海信领衔五强排行全评价
  • 【251111】CF2161 Div.1+2 vp 总结
  • 2025年11月深圳近视手术医生评测榜:五位口碑医师排行解析
  • 2025年纸板桶生产厂家权威推荐榜单:方纸桶/生产纸板/全纸桶源头厂家精选
  • Request
  • 30段极简Python代码:这些小技巧你都Get了么
  • 2025年电玩摩托定制厂家权威推荐榜单:电玩摩托游戏机/投币式电玩摩托游戏机/电玩城成人摩托源头厂家精选
  • 关键字 字面量 变量
  • “CMTI测试电源”共模瞬态抗扰度测试方案及标准 - FORCREAT
  • C# 操作 Excel
  • 智能字幕校准系统实战(二):6级匹配算法从精确到模糊的全链路解析
  • 基于MATLAB实现支持向量机(SVM)分类
  • 为什么要使用immer库?
  • 游戏AI行为决策——MLP(多层感知机/人工神经网络)
  • 利用合成孔径雷达进行的距离多普勒成像算法
  • 2025最新美国留学机构推荐:资质认证机构清单+ 个性化规划
  • C# DXF文件解析与交互式显示含缩放/拖拽
  • TensorRT - 命令行程序 - 详解
  • 20251111Tuesday 代码修改备忘(为视频坐席 转坐席 以及 坐席发起呼叫 是否包含视频 而做的修改)
  • 2025年11月连锁酒店排行榜推荐:主流品牌对比与高性价比选择指南
  • 2025年11月沈阳酒店推荐:口碑评价列表实用避坑指南
  • Spring-ai 框架源码分析
  • 2025年11月GEO优化推荐:知名机构排行榜口碑评价对比指南