前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >React v18.x 在 react-router v6 使用 lazy 动态加载组件实现

React v18.x 在 react-router v6 使用 lazy 动态加载组件实现

作者头像
SpiritLing
发布2022-09-07 15:25:37
4.3K0
发布2022-09-07 15:25:37
举报
文章被收录于专栏:SpiritLingSpiritLing

对于直接使用 React.lazy 来说,基本上是没有问题的,但是当在 ts 下,将导入的组件放到 router 的 elment 属性下会报错,一般为类型不匹配

而且对于 lazy 来说,是react提供的一个功能,并且需要配置 fallback 来确保当组件找不到或者正在获取时的替换组件。

那么我们可以创建一个 lazy-import-component.tsx 来共用

代码语言:javascript
复制
import GlobalLoading from '@main/components/global-loading/global-loading';
import React, { LazyExoticComponent } from 'react';

export const LazyImportComponent = (props: {
  lazyChildren: LazyExoticComponent<() => JSX.Element>;
}) => {
  return (
    <React.Suspense fallback={<GlobalLoading />}>
      <props.lazyChildren />
    </React.Suspense>
  );
};

其中 GlobalLoading 为你自己写的loading组件,并且此处可以替换成任意组件

然后再 router 中使用即可解决 lazy 导入的组件不能在 router 的 elment中使用

代码语言:javascript
复制
import { Navigate,RouteObject } from 'react-router-dom';
import React from 'react';
import { LazyImportComponent } from '@main/components/lazy-import-component';
const DashboardLazy = React.lazy(() => import('./dashboard'));
export const DashboardRouter: RouteObject = {
  path: '/dashboard',
  element: <LazyImportComponent lazyChildren={DashboardLazy} />
};

即可实现动态加载组件

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档