React动态路由配置

目录

项目初始化

模块创建

统一导出

全局模块配置选项

核心代码

使用及效果展示


博文适用于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;

运行效果

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion webui安装使用

参考&#xff1a; https://stability.ai/blog/stable-diffusion-public-release https://github.com/AUTOMATIC1111/stable-diffusion-webui 1、安装&#xff08;6g显存&#xff09; 1、conda创建python 3.10.6环境 conda create -n stable-diffusion pythonpython 3.10.6 也安…

中国南方Oracle用户组沙龙活动:大环境下的Oracle数据库的机遇与挑战

2023年03月12日(周日)在杭州索菲特西湖大酒店 (浙江省杭州市上城区西湖大道333 号)&#xff0c;中国南方Oracle用户组创始人之一&#xff1a;周亮&#xff08;zhou liang&#xff09;组织举办了主题为《大环境下的Oracle数据库的机遇与挑战》活动&#xff0c;大约有50名左右的人…

刷完这个笔记,17K不能再少了....

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;得准备面试了&#xff0c;又不知道从何下手&#xff01;为了帮大家节约时间&#xff0c;特意准备了一份面试相关的资料&#xff0c;内容非常的全面&#xff0c;真的可以好好补一补&#xff0c;希望大家在都能拿到理想…

马赛克处理

去取马赛克的网址&#xff1a; Redact • Photo - Free And Private Image Redaction In The Browser https://redact.photo/ REDACT.PHOTO &#xff08;照片马赛克处理在线工具&#xff09;简介 REDACT.PHOTO是一个照片马赛克处理在线工具&#xff0c;能够帮助我们非常方便…

ChatGPT使用体验

ChatGPT使用体验 前言 介绍ChatGPT 体验ChatGPT 菜谱 编程学习 出行导航 导游攻略 中英翻译 电影推荐 文章总结 总结 前言 最近关于ChatGPT的话题已经火爆了&#xff0c;我也观察和体验了一段时间。平心而论&#xff0c;这东西真的黑科技&#xff0c;大多行业都能通…

Windows10安装二进制Mysql-5.7.41和汉化

1.创建my.ini [mysqld] ##skip-grant-tables1 port 3306 basedirD:/webStudy/mysql-5.7.41 datadirE:/adata/mysqlData max_connections200 character-set-serverutf8 default-storage-engineINNODB sql_modeNO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysql] default-char…

论文解读|MetaAI图像分割基础模型SAM——解锁数字大脑“视觉区”

原创 | 文 BFT机器人 内容提要 事件背景: 2023年4月5日&#xff0c;MetaAI研究团队发布论文“分割一切”一《Segment Anything》并在官网发布了图像分割基础模型一Segment Anything Model(SAM)以及图像注释数据集Segment-Anything 1-Billion(SA-1B)。 论文核心观点 : 目…

Simulink 和 Gazebo联合仿真控制机械臂【Matlab R2022a】

逛 B 站&#xff0c;偶然发现一个 up 主上传的视频&#xff0c;可以实现 Simulink 中搭建机器人的控制器设计&#xff0c;对运行在虚拟机中 Gazebo 中的机械臂进行控制&#xff0c;链接&#xff1a;三关节机械臂Gazebo-Simulink联合仿真&#xff0c;这让我很感兴趣&#xff0c;…

60岁的机器视觉工程师,你还在敲代码?不想做机器视觉工程师,还可以做什么?机器视觉工程师职业生命线有多长​?

如果按程序员参加工作时间为22岁计算,平均退役年龄为35岁计算的话,程序员的职业寿命大概为14年。为什么程序员的职业生命线如此短暂呢?大致有以下几点—— 1、编程技术层出不穷,迭代速度非常快,这时候就需要我们不断的学习,不断地保持学习能力,当随着年龄的增长我们的学…

K8S系列之污点和容忍度详细分析

架构图 本篇文档主要介绍污点和容忍度的关系。 污点和容忍度 污点顾名思义就是脏的东西&#xff0c;给节点添加污点来限制pod调度到该节点上&#xff0c;如果pod可以容忍这种污点就可以被调度到有污点的节点上&#xff0c;如果不能容忍就不能被调度到该节点上。 污点作用于节…

Java版本企业电子招采系统源码——信息数智化招采系统

信息数智化招采系统 服务框架&#xff1a;Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构&#xff1a;VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术&#xff1a;Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、Stre…

Nginx实现负载均衡

张三开发了一个分享文学作品的网站&#xff0c;刚开始入驻的作者不多&#xff0c;可谓是人烟稀少。但入驻的作者们信念坚定&#xff0c;孜孜不倦地更新着自己的作品&#xff0c;功夫不负有心人&#xff0c;作品迎来了爆发式的阅读增长量&#xff0c;终于&#xff0c;大访问量使…

YooAsset | Unity资源管理方案

跳转官方仓库地址 一、说明 可空包、可首包DLC、可满足限制包体的需求、可玩家自己制作MOD上传到服务器、可分工程构建&#xff1b;支持内置渲染管线、可编程渲染管线&#xff1b;支持完整路径、可寻址资源定位&#xff1b;基于标签打包&#xff0c;自动分析冗余&#xff0c;基…

有效和无效的帮助中心区别在哪?如何设计有效的帮助中心?

帮助中心就是一个丰富的知识库&#xff0c;可以对企业的潜在客户进行引导。不仅能够提升用户的使用体验还能为企业塑造更加专业的品牌形象&#xff0c;在使用过程中为用户提供帮助。帮助中心的目的就是为了解决用户在使用过程中遇到的困难&#xff0c;同时为用户的使用提供引导…

《操作系统》——计算机系统概述

前言&#xff1a; 在之前的【Linux】学习中&#xff0c;我们已经对常见指令已经开发工具等进行了详细的了解。紧接着&#xff0c;我们将要学习的便是关于【Linux进程】的基本知识。但是为了帮助大家更好的理解相关的知识概念&#xff0c;我先带领大家来学习关于《操作系统》这…

Kali工具集简介

Kali Linux提供了数种经过定制的专门为渗透测试设计的工具。工具都会按下图中下拉选单所示的方式按组分类聚合。了解工具是做渗透测试第一个认知。 口Information Gathering(信息收集) 这些都是侦察工具,用来收集目标网络和设备的数据。在这类工具中,从找出设备的工具到查看使…

李薇:大模型时代的数据变革

Datawhale干货 作者&#xff1a;李薇&#xff0c;上海人工智能实验室 前言 今天&#xff0c;我将向那些希望深入了解大模型的同学们&#xff0c;分享一些关于大模型时代的数据变革的知识。作为上海人工智能实验室OpenDataLab的产品主管&#xff0c;我会介绍我们在开放数据和大…

Android9.0 Charles 模拟器抓包

目录 只想做条安静的咸鱼&#xff0c;混吃等死又一天 一、下载并安装配置Charles 二、下载安装Postern 三、测试抓包 一、下载并安装配置Charles 1.Charles下载网址&#x1f447; Charles Web Debugging Proxy • HTTP Monitor / HTTP Proxy / HTTPS & SSL Proxy / Rev…

Python命名空间和作用域

命名空间定义了在某个作用域内变量名和绑定值之间的对应关系&#xff0c;命名空间是键值对的集合&#xff0c;变量名与值是一一对应关系。作用域定义了命名空间中的变量能够在多大范围内起作用。 命名空间在python解释器中是以字典的形式存在的&#xff0c;是以一种可以看得见…

vue项目打包成桌面应用并修改图标

目录 1. 打包为桌面应用 2.修改图标 1. 打包为桌面应用 1.在vux项目的终端执行打包 npm run build 2.会在项目文件夹里面出现一个dist文件夹 里面有这几个文件组成 3.在这里需要添加一个 package.json 文件 package.json 内容 {"name": "鼠标放图标上面的提…