react-router V6 版本的使用(自己封装了 Redirect,使用 useRoute 等)

2023-11-01

react-router V6 版本的使用(自己封装了 Redirect等)

IndexRouter.js 使用useRoute 做全局路由的搭建,包括嵌套路由,路由重定向,路由拦截(自己封装),路由懒加载(做了一个简单的封装)等

import React from 'react';
import {useRoutes} from "react-router-dom";
import LazyLoad from "./Lazyload";
import NewsSandBox from "../views/NewsSandBox/NewsSandBox";
import AuthComponent from "./AuthComponent";

function IndexRouter(props) {
  const routerElement = useRoutes([
    //  重定向操作
    {
      path: "/",
      element: <AuthComponent>
        <NewsSandBox></NewsSandBox>
      </AuthComponent>,

      children:[
        //  二级路由的重定向
        {
          path:"/",
          element:  LazyLoad("/home/Home")
        },


        {
          path: "home",
          element: LazyLoad("/home/Home")
        },

        {
          path: "user-manage",
          element: LazyLoad("/userlist/Userlist"),
          children:[
            {
              path: "",
              element: LazyLoad("/userlist/Userlist")
            },
            {
              path: "list",
              element: LazyLoad("/userlist/Userlist")
            }
          ]
        },

        {
          path: "right-manage",
          // element: LazyLoad("/rolelist/Rolelist"),
          children: [
            {
              path: "role",
              element: LazyLoad("/right-manage/rolelist/Rolelist"),
              children:[
                {
                  path: "",
                  element: LazyLoad("/right-manage/rolelist/Rolelist"),
                },
                {
                  path: "list",
                  element: LazyLoad("/right-manage/rolelist/Rolelist"),
                }
              ]
            },
            {
              path: "right",
              element: LazyLoad("/right-manage/rightlist/Rightlist"),
              children:[
                {
                  path: "",
                  element: LazyLoad("/right-manage/rightlist/Rightlist"),
                },
                {
                  path: "list",
                  element: LazyLoad("/right-manage/rightlist/Rightlist"),
                }
              ]
            }
          ]
        },

        // 配置 无权限(404)
        {
          path: "*",
          element: LazyLoad("/nopermission/Nopermission"),
        }


      ]

    },

    {
      path: "/login",
      element: LazyLoad("/login/Login")
    },


    {
      path: "/sandbox",
      element: LazyLoad("/NewsSandBox/NewsSandBox"),
    }

  ]);


  return (
      routerElement
  );

}

function IsAuth() {
  return localStorage.getItem("token") ? true : false;
}

export default IndexRouter;

AuthComponent.js 实现路由拦截,看有没有 token,有token正常访问,没有 token 进入 login 页面

import Redirect from "./Redirect";
function AuthComponent({children}) {
  const isLogin = localStorage.getItem("token");
  return isLogin ? children : <Redirect to="/login"/>
}

export default AuthComponent;

LazyLoad.js :因为只使用 React.lazy 的话,会报警告,需要搭配 Suspense 中的fallback 使用,所以就进行了简单封装

// 路由懒加载的封装
import React from "react";


const LazyLoad = (path) => {
  const Comp = React.lazy(() => import('../views'+path));
  return(
      <React.Suspense fallback={<>加载中</>}>
        <Comp></Comp>
      </React.Suspense>
  )
}

export default LazyLoad

Redirect.js :V6版本移除了 Redirect ,所以为了使用方便,封装了一个简单的 Redirect

import React, {useEffect} from 'react';
import {useNavigate} from "react-router-dom";

function Redirect({to}) {
  const navigate = useNavigate();
  useEffect(() => {
    navigate(to, {replace: true});
  })
  return null;
}

export default Redirect;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react-router V6 版本的使用(自己封装了 Redirect,使用 useRoute 等) 的相关文章

  • Redux - 异步加载初始状态

    我正在尝试找出最简洁的方法来加载来自 API 调用的 Redux 存储的初始状态 据我所知 提供初始状态的典型方法是在页面加载时在服务器端生成它 并将其作为简单对象提供给 Redux createStore 但是 我正在编写一个应用程序 计
  • 将 PictureStream 转换为 HTML5 画布

    我正在从 net Web 服务检索图片流的字节数组 JSON 字节数组响应如下所示 137 80 78 372 617 more 我正在尝试转换这个字节数组并将其绘制到 HTML 画布中 如下所示 var context document
  • 列出文件夹中的所有文件,包括子文件夹中的文件

    我正在尝试创建一个 Google Apps 脚本 该脚本将允许用户获取文件夹内的所有文件 包括连接到主文件夹的子文件夹内的文件 请注意 在我的代码中 我是提供folderid的人 这将是主文件夹 我已设法从文件夹中获取所有文件 但我还希望提
  • 为 HTML5 Django Web 应用程序实现实时通知系统

    我目前正在开发一个由 Django apache 提供服务的 HTML5 Web 应用程序 该应用程序的目标是监视多个设备 所有客户端逻辑都是用 Angular 编写的 所有数据都来自对后端进行的基于 JSON 的类似 REST 的调用 我
  • 将本地图像路径作为两个功能组件之间的 prop 传递

    我正在使用 React Native 开发一个项目 在该项目中我很难理解 props 在功能组件之间的工作原理 我的要求是创建一个可重用的按钮组件 我可以在其中传递项目内资源文件中的图像位置 这样它就会为我创建按钮 由于某种原因 如果我手动
  • 访问原型中的“私有”变量

    JavaScript 是否可以创建一个可以在原型中访问的私有变量 我尝试了以下显然不起作用 http jsfiddle net TBfk4 因为bar只能从内部访问Foo而不是来自原型内部 function Foo var bar test
  • 阻止 Android WebView 尝试在 loadData() 上加载/捕获 CSS 等资源

    背景 这似乎与许多其他问题重复 相信我 事实并非如此 我正在尝试将 html 数据加载到WebView https developer android com reference android webkit WebView html 能够
  • 使用 DataTables (Meteor Tabular) 在新行中绘制数组的每个元素

    我正在使用流星表格包 https atmospherejs com aldeed tabular aldeed tabular它实现了数据表 http datatables net 我正在尝试从 Mongo 集合创建一个表 该集合有一份以下
  • Javascript - 将类型化数组保存为 blob 并以二进制数据读回

    我有一个充满二进制数据的类型化数组 它是从 ArrayBuffer 生成的 var myArr new Uint8Array myBuffer 我将其呈现给用户 var blob new Blob myArr type octet stre
  • 类型“AngularFirestoreCollection”上不存在属性“onSnapshot”

    我正在尝试将侦听器与云 Firebase 分离 但仍然收到此错误 类型 AngularFirestoreCollection 上不存在属性 onSnapshot 你知道我应该进口什么吗 我直接从 Firebase 文档中复制此代码 let
  • Promise 和 setTimeout

    我正在尝试确定一种方法来 暂停 我的 Promises 代码 直到条件成立为止 也许可以使用递归setTimeout 对于我的简单示例 我手动设置waitValue 我需要等一下 如果waitValue仍然是错误的 那就只能继续等待了 当然
  • 按 T​​ab 键可关闭从子菜单打开的 Material UI 对话框

    我需要创建一个菜单栏 其中包含许多带有子菜单的菜单 当我从顶级菜单项打开对话框时 一切都会按预期 预期进行 但是当我从子菜单打开对话框时 按 Tab 键会关闭该对话框 我尝试了几种不同的方法来实现嵌套菜单 并选择了此处讨论的方法 https
  • 无法读取未定义的属性“isLoggedIn”

    此代码用于添加产品 然后添加到购物车和订单 并在后端使用 mongodb 创建 pdf 实际上 session isLoggedIn 是在 auth js 中定义的 检查该代码 但仍在 app js 中它给出了此错误 应用程序 JS代码 c
  • 如何更改 Dojo TabContainer 行为以仅打开外部链接而不是显示 ContentPane?

    我正在与一个TabContainer有几个不同的ContentPane孩子们 他们每个人都配备了href用于获取选择选项卡时显示的外部 AJAX 内容的参数 dojo addOnLoad function var tc nav new di
  • 如何将 Jitsi Meet 添加到 Vuejs

    我已在 public html 的正文中加载了 jitsi meet 脚本 并且我有一个组件 如下所示
  • XRegExp 没有后视功能?

    我需要在JavaScript中使用正则表达式的lookbehind 所以发现在 JavaScript 中模拟lookbehind 第 2 步 https gist github com slevithan 2387872 另外 我发现作者
  • eslint/prettier 在 html 标签中添加不需要的空间

    我正在尝试向我的项目添加配置 以便代码自动格式化 我对 VS Code 中的用户设置进行了一些更新 还安装了 eslint 和 prettier 现在 每当我尝试保存我的代码时 都会从中得到改变 div div div div div di
  • float:使所有 Y 轴的刻度线对齐

    我有一个流程图 除了第一个 Y 轴之外 还使用具有不同数字刻度的辅助 Y 轴 我的问题是辅助刻度标签与第一个浮动轴制作的网格线不对齐 Flot 似乎正在运行一些内部算法来决定为轴显示多少个刻度标签 它对每个轴分别执行此操作 从而产生了我遇到
  • 模块模式和这个

    我正在为我的 JavaScript 类 使用模块模式 声明有什么重大缺点吗 var self在课外我返回然后将其设置为this在类构造函数内部 这样当我不希望发生上下文切换时 我就不必担心上下文切换 在这个小例子中 可能没有必要 这只是一个
  • jQuery / Javascript - 检测 WooCommerce 商店通知 html 是否可见

    我正在寻找一种方法来确定使用 JavaScript jQuery 是否显示 WooCommerce 商店通知 商店通知的 HTML 看起来像这样 p class woocommerce store notice demo store sty

随机推荐

  • Mac OS X下Android系统华为手机无法连接问题之解决方案

    一般的android连接mac 很方便不用安装驱动就可以啦 可是不知道为什么特殊情况下有的android手机 小米2 华为等 就是连接不上 下来就说说特殊情况下如何连接 使用USB连接安卓手机后可以做2件事情 关于本机 gt 更多信息 gt
  • 模板的显示实例化与显示具体化

    显式实例化 C 中模板函数 类 的调用与定义分离时 需要使用显式实例化 否则就会出现链接错误 编译器对各个cpp分别编译的时候 模板函数必须被实例化编译 如果我们把调用与定义写在一个文件 在调用语句处有int a b cmp a b 那么编
  • UVM的phase机制(Ⅰ)

    uvm存在phase机制 每个phase完成对应的功能 将所有的程序分解在不同的phase中执行 保证了验证环境的验证代码的执行顺序 并且每个phase完成对应的功能 使验证环境运行仿真层次化 让各种组件的例化次序正确 环境的执行顺序正确
  • 万字长文分享,如何自学Java(方法+步骤)

    目录 收起 大家存在的问题 为什么我觉得方法很重要 五个步骤学习Java 第一阶段 揽全局 怎么办 你需要的是系统化学习 教程式笔记 我的大学 我准备从思想方法和具体的学习步骤上给大家聊一下我的做法 希望对大家有所帮助 看完本篇文章你会得到
  • C语言-商品销售管理系统

    C语言 商品销售管理系统 全部代码如下 include
  • jsp中的stl标签库

    catch标签 forEach标签 remove标签 param标签 set标签 url标签
  • ZooKeeper安装后无法启动JAVA_HOME is not set and java could not be found in PATH.

    JAVA HOME is not set and java could not be found in PATH 在安装后使用命令 zkServer sh start启动出现JAVA HOME找不到的提示 去查看 etc profile文件
  • Java网络编程相关知识

    网络编程 1 在网络通信协议下 不同 计算机上运行的程序 进行的数据传输 2 应用场景 即时通信 网游对战 金融证券 国际贸易 邮件等等 3 Java中可以使用java net包下的技术开发出常见的网络应用程序 4 常见的软件架构有CS和B
  • UE4_蓝图调试器

    蓝图调试器 在蓝图调式器里可以看到所有的断点和 watch this value 的值 下面这幅图可以取消所有的断点和watch this value 节点注释
  • opencv 直方图 CV::calcHist使用

    本文转自 http www xuebuyuan com 1014703 html 特别提醒读者 注意实例中数据成员很多都定义成数据 这是由于calcHist函数形参要求的 直方图在图形处理中很常用 直方图可以统计图像的像素特征分布 用于修改
  • jdk1.8 下 list stream转数组 map 循环 过滤等操作的常见写法

    Jdk1 8中 对于 list 有非常多的快捷操作方便我们处理数据 比如 list 转 map 对象操作 在开发过程我们有时会在for循环过程中查询另一个表的数据 我们可以提前把数据查询出来 转换成map 使用过程中通过map获取数据 避免
  • vue 3 第二十六章:样式(scoped、深度选择器、全局选择器、css modules、自定义注入名称、css中v-bind)

    文章目录 1 介绍 2 基本使用 3 scoped原理 4 深度选择器 5 插槽选择器 6 全局选择器 7 混合使用局部与全局样式 8 CSS Modules 9 自定义注入名称 10 CSS 中的 v bind 1 介绍 在 Vue 中
  • 手把手实战教学!语义分割从0到1:一、数据集制作

    本篇博客 是 手把手实战教学 语义分割从0到1 系列的第一篇实战教学 将重点介绍语义分割相关数据集 以及如何制作自己的数据集 本系列总的介绍 以及其他章节的汇总 见 https blog csdn net oYeZhou article d
  • eclipse debug进入.class_用eclipse创建一个java程序

    1 开启Eclipse程序后 首先开始Eclipse中JAVA项目的新建 在上方的选项栏中选择 File New Java Project 系统会弹出新建项目的属性设置 2 在Java Project的设置页面 主要设置project的项目
  • 网狐荣耀手机端内核源码

    网狐荣耀手机端内核源码 实测 可用 链接 https pan baidu com s 1YT GWgFCDxYqrez7e EJqw 提取码 0ezk
  • 因特网(Internet)的概述

    一 因特网的概述 1 主机 连接在因特网上的计算机都称为主机 2 网络 网络 network 由若干节点 node 和连接这些的结点的链路 link 组成 互联网由网络组成 3 Internet和internet的区别 internet 互
  • 线性代数的本质(四)——行列式

    文章目录 行列式 二阶行列式 n n n 阶行列式 行列式的性质 克拉默法则 行列式的几何理解 行列式 二阶行列式 行列式引自对线性方程组的求解 考虑两个方程的二元线性方程组
  • Flask入门教程(3)-表单验证和WTF扩展

    03 01 普通的表单验证 03 02 flash消息闪现 html代码
  • 自顶向下语法分析(top-down parsing)

    自顶向下语法分析 top down parsing 有回溯的自顶向下分析 非预测分析法 无回溯的自顶向下分析 预测分析法 FIRST集和FOLLOW集 两种预测分析算法 LL 1 文法 文法转换 消除左递归 提取左公因子 输入程序经过词法分
  • react-router V6 版本的使用(自己封装了 Redirect,使用 useRoute 等)

    react router V6 版本的使用 自己封装了 Redirect等 IndexRouter js 使用useRoute 做全局路由的搭建 包括嵌套路由 路由重定向 路由拦截 自己封装 路由懒加载 做了一个简单的封装 等 import