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

React H5设置企业级v6版本路由的配置

路由配置是项目开发的必要一环,尤其是目前流行SPA,下面看看如何使用v6版本路由进行合理的H5路由配置

一、基本页面结构(目录根据开发要求建,下面仅用于展示配置路由)

在这里插入图片描述

二、具体文件实现

1. index.tsx

import React from "react";
import ReactDOM from "react-dom/client";
import vconsole from "vconsole";
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import "normalize.css/normalize.css";
import routes from "./router";const BASENAME = "/h5";const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement
);const router = createBrowserRouter(routes, { basename: BASENAME });root.render(<React.StrictMode><RouterProvider router={router} /></React.StrictMode>
);if (process.env.NODE_ENV === "development" ||window.location.search.includes("debug=true")
) {new vconsole();
}

2. App.tsx

import { Suspense } from "react";
import { AliveScope } from "react-activation";
import { Outlet } from "react-router-dom";function App() {return (<Suspense><AliveScope>{/* Outlet是React Router v6中的一个组件,用于在嵌套路由中渲染子路由的组件。它充当一个占位符,表示在这个位置将渲染匹配的子路由组件。 */}<Outlet /></AliveScope></Suspense>);
}export default App;

3. ./router/index.tsx

import App from "@/App";
import type { RouteObject } from "react-router";
import { Navigate } from "react-router-dom";
// @loadable/component 是一个用于 React 应用程序的库,主要用于实现代码拆分和懒加载。它允许你将组件按需加载,从而减少初始加载时间,提高应用性能。
// 官网:https://loadable-components.com/docs/getting-started/
import loadable from "@loadable/component";
import mainRoutes from "./mainRoutes";
import userRoutes from "./userRoutes";const NotFound = loadable(() => import("@/pages/NotFound"));// 在路由的第一层应该在前面加上【/】
// 在 children 里面不需要加【/】,对于嵌套路由,子路径通常不需要以斜杠 (/) 开头,因为它们是相对于父路径解析的。
let routes: RouteObject[] = [{path: "/",element: <App />,children: [mainRoutes, userRoutes],},// 匹配不准确的路由,跳转到 404 页面{path: "*",element: <NotFound />,},
];const Devtool = loadable(() => import("@/pages/Devtool"));// 如果是开发环境,添加 devtool 页面,用于快速页面跳转
if (process.env.NODE_ENV === "development") {routes = [{path: "/",element: <Navigate to={"devtool"} replace />,},{path: "/devtool",element: <Devtool />,},...routes,];
}export default routes;

4. ./router/mainRoutes.tsx

import type { RouteObject } from "react-router";
import KeepAlive from "react-activation";
import { lazy } from "react";
import { Navigate } from "react-router-dom";const MainLayout = lazy(() => import("@/pages/Main/Layout"));const MainList = lazy(() => import("@/pages/Main/List"));const MainDetail = lazy(() => import("@/pages/Main/Detail"));/*** 主要业务内容路由*/
const mainRoutes: RouteObject = {path: "main",element: <MainLayout />,children: [// v6重定向用Navigate标签定义跳转{path: "",element: <Navigate to="list" replace />,},{path: "list",element: (<KeepAlive name="main-list"><MainList /></KeepAlive>),},{path: "detail",element: <MainDetail />,},],
};
export default mainRoutes;

5. ./router/userRoutes.tsx

import type { RouteObject } from "react-router";
import { lazy } from "react";const UserLayout = lazy(() => import("@/pages/User/Layout"));const UserInfo = lazy(() => import("@/pages/User/UserInfo"));/*** 用户信息模块路由*/
const userRoutes: RouteObject = {path: "user",element: <UserLayout />,children: [{path: "info",element: <UserInfo />,},],
};export default userRoutes;

6. Layout.tsx

import { Outlet } from "react-router-dom";const Layout = () => {return <Outlet />;
};export default Layout;
http://www.lryc.cn/news/423735.html

相关文章:

  • 【微信小程序】全局配置
  • 25届秋招网络安全面试资料库
  • Adobe Dimension DN v4.0.2 解锁版下载安装教程 (专业的三维3D建模工具)
  • Python中*args 和 **kwargs作参数时有什么区别
  • [CSS3]2D与3D变换技术详解
  • 大恒相机通过Line2或Line3直接给出3.3V触发,形成分时曝光
  • electronjs实现打开的网页密码自动保存
  • 观测云的自动化监控:CRD 资源与自动发现
  • 九、OpenCVSharp 中的图像形态学操作
  • http和websocket
  • Go 语言错误处理
  • LVS部分配置1
  • datax和datax-web打包成docker运行
  • 命令行参数环境变量
  • 『大模型笔记』WizardLM:使大型预训练语言模型能够遵循复杂的指令
  • 编程-设计模式 2:抽象工厂模式
  • 阿里云智能大数据演进
  • Java面试题———Spring篇①
  • 4章10节:用R做数据重塑,变体函数应用详解和可视化的数据预处理介绍
  • Socks5代理IP在跨境电商和网络爬虫领域的实战应用
  • 农业上的目标跟踪论文汇总
  • gpxt 小程序:轨迹合并与管理的高效工具
  • elasticsearch集成springboot详细使用
  • html+css网页制作 化妆品电商4个页面
  • 微调LLama 3.1——七月论文审稿GPT第5.5版:拿早期paper-review数据集微调LLama 3.1
  • rust 编译时报错:type annotations needed for Box
  • 应用方案 | 低功耗接地故障控制器D4145
  • 第一次彩色pcb打样记录
  • 通过 MediatR 实现了请求的分发和处理器的解耦
  • Naive UI+vue一些组件的注意事项