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

react+vite-plugin-react-router-generator自动化生成路由

前言:

        react项目实际使用中有很多提升性能与功能的插件,今天来说一说vite里面提供的vite-plugin-react-router-generator,他主要提供了自动生成路由的功能,配合我们的@loadable/component可以实现路由的懒加载与统一管理。

1、实现效果

会自动生成一个jsx文件,将本地文件夹下的文件对应生成路径

2、使用过程

安装

npm/pnpm/cnpm都一样,yarn的话用 yarn add 来安装

npm i vite-plugin-react-router-generator
yarn add vite-plugin-react-router-generator

路由懒加载的安装命令

npm i @loadable/component

vite.config.ts中配置

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { resolve } from "path"// 引入
import ReactRouterGenerator from "vite-plugin-react-router-generator"export default defineConfig({plugins: [react(),reactRouterGenerator({// outputFile必须要有// pagesDir: 'src/pages',  // 指定页面目录// outputFile: 'src/routes.ts',  // 输出路由配置文件outputFile: resolve(".", "./src/router/auto.jsx"),//resolve(".", ...)是为了确保路径解析的准确性,避免不同操作系统的路径分隔符问题。format: 'react-router-v6',  // 生成的路由格式,非必须isLazy: true, // 是否懒加载,非必须,如果为 true,生成的组件会通过 React.lazy(() => import('路径')) 动态导入,实现代码分割(按需加载comKey: "components" //非必须,组件导入别名 @/components/默认值: 无(通常默认为 'pages' 或 'views',具体看插件实现)}),],
});

如果这里的设置isLazy设置true的话,配置路由就是:

// 生成的路由配置示例
const routes = [{path: '/home',element: React.lazy(() => import('@/pages/home')), // 懒加载
}];

反之,不设置或者设置false,配置路由就是:则直接静态导入组件

import Home from '@/pages/home';
const routes = [{ path: '/home', element: <Home /> }];

生成的auto.jsx案例:

// 本文件为脚本自动生成,请勿修改const routes = [{[MENU_PATH]: "/details/person",components: () => import("../pages/details/person.tsx")
}, {[MENU_PATH]: "/form/index",[MENU_LAYOUT]: 'FULLSCREEN',components: () => import("../pages/form/index.tsx")
}, {[MENU_PATH]: "/power/menu",components: () => import("../pages/power/menu.tsx")
}, {[MENU_PATH]: "/power/type",components: () => import("../pages/power/type.tsx")
}, {[MENU_PATH]: "/power/user",components: () => import("../pages/power/user.tsx")
}, {[MENU_PATH]: "/list/card",components: () => import("../pages/list/card.tsx")
}, {[MENU_PATH]: "/list/search",components: () => import("../pages/list/search.tsx")
}, {[MENU_PATH]: "/icons",components: () => import("../pages/icons/index.tsx")
}, {[MENU_PATH]: "/statistics/feedback",components: () => import("../pages/statistics/feedback.tsx")
}, {[MENU_PATH]: "/statistics/visitor",components: () => import("../pages/statistics/vistor.tsx")
}];export default routes

auto.jsx的具体使用:router/index.jsx中使用

路由懒加载方法 

loadable(item.components, { fallback: <Spin style={fellbackStyle} tip="页面加载中...." /> })

import auto from "./auto.jsx";
import { Navigate } from "react-router-dom";
import Error from "@/pages/err"type LoadingComponent = () => Promise<React.ReactNode>
//定义类型
export interface RouterInfo {components: LoadingComponent | React.ReactNode[MENU_PATH]: string[MENU_KEY]?: any[MENU_TITLE]?: string | any[MENU_KEEPALIVE]?: string | any[name: string]: any
}// 写的固定的路由
const defaultArr: RouterInfo[] = [{[MENU_PATH]: "/",[MENU_KEY]: "index",components: <Navigate to="/details/person" replace />,},{[MENU_PATH]: "/404",components: <Error />,},.......
]const autoList: RouterInfo[] = []// 循环遍历我们生成的jsx里面的路由,然后生成最新路由文件,和我们写的固定的相互合并
auto.forEach(item => {const { components, ...anyProps } = itemconst Com = loadable(item.components, { fallback: <Spin style={fellbackStyle} tip="页面加载中...." /> })const info = { ...anyProps, components: <Com /> }autoList.push(info)
})const list: RouterInfo[] = [...autoList, ...defaultArr]
export default list;

http://www.xdnf.cn/news/1280179.html

相关文章:

  • 安全等级认证系列 | 星环ArgoDB获CC EAL2安全认证,数据安全实力获国际认可
  • Linux入门DAY21
  • 用 Python 绘制企业年度财务可视化报告 —— 从 Excel 到 9 种图表全覆盖
  • 读《精益数据分析》:媒体内容平台全链路梳理
  • 低延迟RTSP|RTMP视频链路在AI驱动无人机与机器人操控中的架构实践与性能优化
  • TRS(总收益互换)系统架构设计:多市场交易的技术实现分析
  • 每日五个pyecharts可视化图表-line:从入门到精通 (3)
  • 常用设计模式系列(十九)- 状态模式
  • 闸机控制系统从设计到实现全解析:第 5 篇:RabbitMQ 消息队列与闸机通信设计
  • HBase BlockCache:LRU Cache
  • Agent用户体验设计:人机交互的最佳实践
  • redis(2)-java客户端使用(IDEA基于springboot)
  • 【图像处理基石】UE输出渲染视频,有哪些画质相关的维度和标准可以参考?
  • FlinkSql(详细讲解二)
  • IDE认知革命:JetBrains AI Assistant插件深度调教手册(终极实战指南)
  • 服务器配置实战:从 “密码锁” 到 “分工协作” 的知识点详解
  • POI导入时相关的EXCEL校验
  • Spring Boot Excel数据导入数据库实现详解
  • 缓存的三大问题分析与解决
  • Flink + Hologres构建实时数仓
  • MSE ZooKeeper:Flink高可用架构的企业级选择
  • 容器之王--Docker的安全优化详解及演练
  • 在Mac 上生成GitLab 的SSH 密钥并将其添加到GitLab
  • Django Request 与 DRF Request 的区别
  • (Arxiv-2025)Phantom:通过跨模态对齐实现主体一致性视频生成
  • 什么情况下会导致日本服务器变慢?解决办法
  • 第2节 大模型分布式推理架构设计原则
  • AIStarter修复macOS 15兼容问题:跨平台AI项目管理新体验
  • MySQL权限管理和MySQL备份
  • 大模型落地实践:从技术重构到行业变革的双重突破