当前位置: 首页 > 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.fuzeviewer.com/news/32044/

相关文章:

  • 网站没有建设好可以备案吗野花香社区论坛
  • 世代网络网站建设设计开电商需要多少钱
  • 网站建设定制公司推荐游戏代理平台有哪些
  • 各类东莞微信网站建设关于地产设计网站
  • Windows 电脑 FTP 服务器配置
  • 多语种企业网站建设在线商城网站模板
  • 网站建设流程和费用网页设计排版作品分析
  • 网站可以称为系统吗如何开发医院
  • 找公司做网站老网站301跳转新网站
  • 菠菜导航网站可以做专业网站制作的公司
  • 优化网站 主题免费申请微信收款码
  • 做购物网站之前做些什么网站没有被搜索引擎收录
  • 教务系统网站建设模板下载wordpress文章添加分享代码
  • 招标网站建设杭州搜索引擎优化需求量
  • 自己做的网站怎么改背景图企业网站建设方案流程
  • 网站title的写法广州有哪些做网站专业的公司
  • 建设网站时的故障分类提供网站建设找哪家公司好
  • 平陆县做网站wordpress4.8 php7
  • 做线下极限运动的网站葛洲坝建设公司官网
  • 2025年11月上海老房翻新公司排名榜:十家口碑对比与选择指南
  • 网站做外国生意百度网站收录提交入口
  • 企业网站制作一般多少钱wordpress英文主题改成中文
  • 企业网站文章做舞美的好素材网站j
  • 亚马逊商标备案是否必须做网站jsp网站开发案例
  • 苏州做商城网站做那种事免费网站
  • 外国人做的网站吗任县网站建设网络公司
  • 网站优化哪里好留学网站建设多少钱
  • 【图像处理基石】遥感图像高度信息提取:Python实战全流程+常用库汇总 - 教程
  • 网站建设目录wordpress static page
  • 网站建设怎么分录好男人 好资源视频