React动态路由配置

news2024/10/7 9:21:50

目录

项目初始化

模块创建

统一导出

全局模块配置选项

核心代码

使用及效果展示


博文适用于react-router v6及以上,其中还有很多值得改进的地方

最近学习react的过程中,思考怎样实现动态路由的配置(最终实现从页面配置最终动态从数据库加载上线模块),从最新react-router-dom官网的推荐方式

其中二级路由出口还是得在相应的模块中配置路由出口,见博文

react-router-dom  v6版本,v5版本可能使用react-router-config,运行v6上不支持,主要是移除了Switch

由于没有很好的案例提供思路,不过还是从下面的博文找到解决问题的方法

学习 React 创建路由(超简单)_react添加路由_小树枝.的博客-CSDN博客

项目初始化

首先脚手架创建项目(nodejs服务本地已安装)及依赖安装

npx create-react-app xk07

npm install react-router-dom

模块创建

 首先创建四个模块 ACD模块内容类似

import React from 'react'



export default function A() {

  return (

    <div>

      this is A React component

    </div>

  )

}

模块B,有子模块的情况,使用Outlet 添加路由出口

import React from 'react'

import{Outlet} from 'react-router-dom'



export default function B() {

  return (

    <div>

      this is B React component

      <Outlet></Outlet>

    </div>

  )

}

统一导出

统一导出模块xk07\src\pages\ComponentsAll.js

import A from './A/A'

import B from './B/B'

import C from './C/C'

import D from './D/D'



export  {A,B,C,D}

全局模块配置选项

配置路由 xk07\src\pages\Router.js   当然可以导出多个配置项,可能会有此场景

import { A, B, C, D } from './ComponentsAll'

const routersIndex =
    [
        {
            path: '/',
            name: 'A页面',
            components: A
        },
        {
            path: '/B',
            name: 'B页面',
            components: B,
            children: [
                {
                    path: "D",
                    name: 'D页面',
                    components: D
                }
            ]
        },
        {
            path: '/C',
            name: 'C页面',
            components: C
        }
    ]

export { routersIndex };

核心代码

升级组件  xk07\src\pages\Index.js

动态配置的实现主要是在于生成对应组件的json文件上

import { routersIndex } from './Router';


function IndexRouter() {
    const routers = []
    routersIndex.map((item) => {
        console.log(item);
        if (item.children === undefined) {
            routers.push(
                {
                    path: item.path,
                    element: <item.components />
                })
        } else {
            const rootNode = {
                path: item.path,
                element: <item.components />,
                children: []
            }
            item.children.map((child, index) => {
                rootNode.children.push(
                    {
                        path: child.path,
                        element: <child.components />
                    }
                )
            })
            routers.push(rootNode)
        }
    }

    )
    return routers

}

const routers = IndexRouter()

export { routers }

使用及效果展示

最后使用  xk07\src\App.js

import {
  createBrowserRouter,
  RouterProvider
} from 'react-router-dom'
import { routers } from './pages/Index'


function App() {
  const router = createBrowserRouter(routers);
  return (
    <div>
      <RouterProvider router={router} />
    </div>
  )
}

export default App;

运行效果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/517752.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++解析JSON JSONCPP库的使用

首先去GitHub下载JSONCPP的源码&#xff1a; JSonCpp的源码 解压后得到&#xff1a;jsoncpp-master 文件夹 需要的是&#xff1a;jsoncpp-master\src\lib_json 目录下的所有文件和 jsoncpp-master\include\json 目录下的所有文件&#xff0c;在MFC工程目录下新建两个文件夹或…

承诺协议:定义 构造

文章目录 安全性定义方案构造基于 OWP 存在性基于 DL 假设基于 OWF 存在性基于 DDH 假设 总结 安全性定义 承诺协议&#xff08;Commitment Scheme&#xff09;是一个两阶段的两方协议。一方是承诺者&#xff08;Committer&#xff09; C C C&#xff0c;另一方是接收者&#…

网络安全怎么学?

一、怎么入门&#xff1f; 这个 Web 安全学习路线&#xff0c;整体大概半年左右&#xff0c;具体视每个人的情况而定。 &#xff08;上传一直很模糊&#xff0c;所以就没有展开了&#xff0c;需要高清版的可以在下面领取&#xff09; &#x1f449; 【一学习路线高清版一】&a…

WiFi(Wireless Fidelity)基础(八)

目录 一、基本介绍&#xff08;Introduction&#xff09; 二、进化发展&#xff08;Evolution&#xff09; 三、PHY帧&#xff08;&#xff08;PHY Frame &#xff09; 四、MAC帧&#xff08;MAC Frame &#xff09; 五、协议&#xff08;Protocol&#xff09; 六、安全&#x…

AndroidStudio-学习笔记之多级目录功能的设计与开发

多级目录功能的设计与开发 演示效果需求描述开发预计前端后端 前端开发多级目录的UI小框架前端xml前端代码---本地demo版前端代码---服务器版逻辑说明 后端开发表设计书写接口 演示效果 需求描述 根据需求&#xff0c;为用户展示多级目录(目前设计的为4级目录)&#xff0c;并在…

Win10笔记本无法正常启动代码0xc0000001解决方法

Win10笔记本无法正常启动代码0xc0000001解决方法。最近不少的用户在笔记本电脑安装Win10系统使用时&#xff0c;出现了蓝屏的情况&#xff0c;电脑显示错误代码0xc0000001无法启动到桌面使用。那么这个情况怎么去进行问题的解决呢&#xff1f;来看看以下的解决方法吧。 准备工作…

OpenCL编程指南-4.1OpenCL C编程

使用OpenCL C编写数据并行内核 OpenCL中的数据并行性表述为一个N维计算域&#xff0c;其中N1、2或3。N-D域定义了可以并行执行的工作项的总数。下面通过一个简单的例子来了解如何用OpenCL C编写一个数据并行内核&#xff0c;将两个浮点数数组相加。这个代码的串行版本求和时需…

在windows上通过QEMU快速上手RT-thread smart

参考链接 官方文档 资料下载 env-windows-v1.3.5.7z userapps 注意事项 通过QEMU仿真不同的平台&#xff0c;使用到的交叉编译工具也不一样&#xff0c;需要将相应工具的路径添加到系统PATH里&#xff1b;或者通过CMD定位到userapps&#xff0c;运行smart-env.bat xxx&…

【jvm系列-11】jvm性能调优篇---命令行工具的基本使用

JVM系列整体栏目 内容链接地址【一】初识虚拟机与java虚拟机https://blog.csdn.net/zhenghuishengq/article/details/129544460【二】jvm的类加载子系统以及jclasslib的基本使用https://blog.csdn.net/zhenghuishengq/article/details/129610963【三】运行时私有区域之虚拟机栈…

智能优化算法——下山单纯型算法

作者&#xff1a;非妃是公主 专栏&#xff1a;《智能优化算法》 博客地址&#xff1a;https://blog.csdn.net/myf_666 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 文章目录 专栏推荐序一、算法流程1. 反射2. 膨胀…

马哈鱼SQLFLow数据流生成介绍

马哈鱼数据血缘分析器是当前最流行的数据血缘关系(data lineage)管理工具之一&#xff0c;它是一种通过分析SQL脚本来自动发现数据流向的工具。它通过生成一个简洁的图表来显示数据仓库中表/视图和列之间的数据流。支持超过20种流行的数据库&#xff0c;包括 bigquery, couchba…

项目风险的4种应对策略及实施条件

面对威胁或可能给项目带来消极影响的风险&#xff0c;我们一般采用规避、转移、缓解和接受的应对策略。 一、风险规避 风险规避策略是指项目团队采取行动来消除威胁&#xff0c;或保护项目免受风险影响的应对策略&#xff0c;通常包括改变项目管理计划&#xff0c;以完全消除威…

super_数学知识(质数筛选和约数学习)lesson08易错题记录

文章目录 回文质数第n小的质数素数个数 回文质数 先上代码 #include<iostream> #include<vector>//创建动态数组需要的头文件 #include<cstring>//使用memset需要的头文件 using namespace std; vector<int> q; bool arr[10000005]; //埃氏筛法找出所…

详解软件开发的标准过程(生命周期):跟着标准搞,设计没烦恼

目录 一.软件开发的生命周期总括 二.项目架构分类 C/S架构 B/S架构 三.详解软件需求 需求分类 需求获取 需求分析 四.详解面向对象分析&#xff08;OOA&#xff09; 概念理解&#xff1a; 统⼀建模语⾔UML UML的重要组成部分&#xff1a; ⽤例图的元素 识别参与者…

怎么搭建个人小型渲染农场?搭建渲染农场配置

渲染农场是众多机器组成的渲染集群&#xff0c;通常用来渲染你的单帧效果图或动画项目&#xff0c;我们借助渲染农场的力量&#xff0c;可以满足3D项目交期时间迫在眉睫的需求&#xff0c;当你试着在自己的机器上渲染一个复杂的动画项目时&#xff0c;可能需要几十小时的等待时…

gdb与symbol符号表文件的调试

目录 1&#xff0c;剥离命令 2&#xff0c;gdbdebug 文件的调试 今天在调试程序的时候发现&#xff0c;在测试部测试的程序都是剥离了符号表的&#xff0c;导致用gdb无法调试&#xff0c;只有找到符号表文件才能继续gdb调试&#xff0c;好在符号表文件是和程序一起发布的。之…

浅谈作为程序员如何写好文档:了解读者

我作为从一名懵懂的实习生转变为工程师的工作经历中&#xff0c;伴随着技术经验的成长&#xff0c;也逐渐意识到了编写文档是知识和经验传递给其他人的最有效方式。通过文档&#xff0c;可以分享我的技术知识和最佳实践&#xff0c;使其他人更好地理解我的工作。在这里&#xf…

Postgres : 创建schema、创建表空间与指定用户权限

1. 创建新的Schema 要创建 PostgreSQL 中的一个新的 schema&#xff0c;并创建一个只有该 schema 权限的新用户&#xff0c;请按照以下步骤操作&#xff1a; &#xff08;1&#xff09;打开 PostgreSQL 客户端并连接到数据库服务器。 &#xff08;2&#xff09;创建一个新的…

如何在Oracle存储过程发生异常时获取out类型参数的值

Oracle存储过程关于在出现&#xff08;自定义/自带&#xff09;异常下out类型参数的获取问题的分析 ✈️ 场景: 有一些关于金额和时间的精确且量大的计算需要在存储过程中完成。存储过程中有一些自定义的异常。并且将在RAISE前通过out类型的参数将详细的异常原因返回。 但是在…

商业智能BI分析报表很慢是什么原因?应该如何优化?

当下&#xff0c;数据计算已成为了分析工作中必不可少的高频次操作之一&#xff0c;而且在大数据的发展背景下&#xff0c;应用性能往往关系着项目的成败&#xff0c;成为了大家最为关注的产品技术参数。那么我们先来分析一下BI分析表计算很慢的原因是什么&#xff0c;再对症下…