IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> React-Router v6 新版本路由封装 -> 正文阅读

[JavaScript知识库]React-Router v6 新版本路由封装

一、安装

//yarn安装
yarn add react-router-dom@6

//npm 安装
npm install react-router-dom@6

二、v6新版本属性改变

  1. 重命名为。
  2. 的新特性变更。
  3. 嵌套路由变得更简单。
  4. 用useNavigate代替useHistory。
  5. 新钩子useRoutes代替react-router-config。
  6. 大小减少:从20kb到8kb

三、准备loading组件

在这里插入图片描述

四、封装解析

1.使用BrowserRouter,当然也可以使用HashRouter。BrowserRouter as Router重命名是为了一旦需要换成HashRouter,可以直接在此替换,不要修改下方代码。
2.通过index.js的路由配置遍历路由,以及路由拦截,判断是否已登录或者404

//路由拦截
 if (!noAuth && !token) return <Route path="*" element={<Navigate to="/login" />} />;

3.404页面可以使用自己封装的,也可使用包自带的,代码如下

< Route path="*" element={<NotFind to="/login" />} />

4.代码

//config.js
import * as React from "react";
import { Routes, Route, BrowserRouter as Router, Navigate } from "react-router-dom";

import Loading from "components/loading";
import NotFind from "components/notFind";

import { mainRouteConfig } from "./config";


const renderRouter = (routerList) => {
    return routerList.map((item) => {
        const { path, exact, noAuth, children } = item;
        const token = localStorage.getItem('token')
        console.log(token)
        if (!noAuth && !token) return <Route path="*" element={<Navigate to="/login" />} />;
        return <Route
            key={path}
            exact={exact}
            path={path}
            element={<item.component />}
        >
            {!!children && children.map(i => {
                return <Route
                    key={i.path}
                    exact={i.exact}
                    path={i.path}
                    element={<i.component />}
                />
            })}
        </Route >;
    });
};


const Routers = (props) => {
    console.log(props.login, props)
    return (
        <Router>
            <React.Suspense fallback={<Loading />}>
                <Routes>
                    {renderRouter(mainRouteConfig)}
                    < Route path="*" element={<NotFind to="/login" />} />
                </Routes>
            </React.Suspense>
        </Router>
    )
}


export default React.memo(Routers)
//index.js
import React from 'react'


const App = React.lazy(() => import(/* webpackChunkName: "Home" */ "src/App"));
const Login = React.lazy(() => import(/* webpackChunkName: "Login" */ "pages/login"));
const System = React.lazy(() => import(/* webpackChunkName: "Login" */ "pages/system"));
const Home = React.lazy(() => import(/* webpackChunkName: "Login" */ "pages/home"));


// 主路由
export const mainRouteConfig = [
    {
        path: "/", title: "首页", exact: true, component: App,
        children: [
            { path: "/", title: "首页", exact: true, component: Home },
            { path: "/system", title: "系统", exact: true, component: System },
        ]
    },
    { path: "/login", title: "登录", exact: true, component: Login, noAuth: true },
];

五、使用

1.这部分比较简单,在App.js中引入封装好的路由组件并使用。
在这里插入图片描述

2.通过 识别路由所对应的组件,整体布局不变,只变中间内容
在这里插入图片描述

总结:小编自己写了一套企业管理系统底层模板。地址:githutb

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:26:06  更:2022-03-24 00:26:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:06:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码