react router v6总结

2024-05-11 13:28

本文主要是介绍react router v6总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、使用createBrowserRouter()创建路由:

1、src/router/index.js:

import { createBrowserRouter } from "react-router-dom";
import ErrorPage from "@/pages/404/";const router = createBrowserRouter([{path: "/",errorElement: <ErrorPage />,async lazy() {const { default: App } = await import("../App.js");return { Component: App };},children: [{errorElement: <ErrorPage />,children: [{index: true,async lazy() {const { default: Home } = await import("../pages/home/");return { Component: Home };},},{path: "collapse",async lazy() {const { default: Collapse } = await import("../pages/collapse/");return { Component: Collapse };},},{path: "timeline",async lazy() {const { default: Timeline } = await import("../pages/timeline/");return { Component: Timeline };},},],},],},{path: "/admin",async lazy() {const { default: Admin } = await import("../pages/admin/");return { Component: Admin };},},
]);export default router;

注意其中的index: true

{index: true,async lazy() {const { default: Home } = await import("../pages/home/");return { Component: Home };},}

2、src/index.js:

import React from "react";
import ReactDOM from "react-dom/client";
import "@/index.css";
import { RouterProvider } from "react-router-dom";
import router from "@/router";
import reportWebVitals from "@/reportWebVitals";const root = ReactDOM.createRoot(document.getElementById("root"));root.render(// <React.StrictMode>//   <App />//   {/* <Admin/> */}// </React.StrictMode><RouterProvider router={router} />
);// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

注意其中的:

<RouterProvider router={router} />

3、src/App.js:

import React from "react";
import { Layout } from "antd";
import Dropdown from "@/components/header/Dropdown";
import "@/App.css";
import SiderMenu from "@/components/sider-menu/";
import { observer } from "mobx-react";
import mobxData from "@/store/MobxData";
import { Outlet } from "react-router-dom";const { Header, Content, Sider } = Layout;const App = () => {return (<Layout className="app-wrapper"><Header className="app-header"><div className="app-logo"><img height="36" src={require("./logo.png")} /></div><Dropdown /></Header><Layout className="app-wrapper-in"><Sider width={mobxData.width} className="app-sider"><SiderMenu /></Sider><Layoutstyle={{padding: "0 24px 0",background: "#e9e9ed",}}><Content className="app-content"><Outlet /></Content></Layout></Layout></Layout>);
};export default observer(App);

注意其中的:

<Outlet />

 4、src/sider-menu/index.js:

import React, { useState } from "react";
import {HomeOutlined,FolderOutlined,AppstoreOutlined,ReadOutlined,TableOutlined,ProductOutlined,MenuFoldOutlined,MenuUnfoldOutlined,
} from "@ant-design/icons";
import "./index.css";
import mobxData from "@/store/MobxData";
import { NavLink } from "react-router-dom";const App = () => {const [status, setStatus] = useState(false);const onclick = () => {setStatus(!status);if (status) {mobxData.changeWidth(30);} else {mobxData.changeWidth(-30);}const elements = document.querySelectorAll(".menu-item dd");for (let i = 0; i < elements.length; i++) {if (status) {elements[i].style.display = "block";} else {elements[i].style.display = "none";}}};return (<div className="menu"><NavLink to="/"><dl className="menu-item"><dt><HomeOutlined /></dt><dd>我的门户</dd></dl></NavLink><NavLink to="/timeline"><dl className="menu-item"><dt><FolderOutlined /></dt><dd>文档中心</dd></dl></NavLink><NavLink to="/collapse"><dl className="menu-item"><dt><AppstoreOutlined /></dt><dd>工作中心</dd></dl></NavLink><dl className="menu-item"><dt><ReadOutlined /></dt><dd>知识中心</dd></dl><dl className="menu-item"><dt><TableOutlined /></dt><dd>表格中心</dd></dl><dl className="menu-item"><dt><ProductOutlined /></dt><dd>应用</dd></dl><div className="collapse">{status ? (<MenuUnfoldOutlined onClick={onclick} />) : (<MenuFoldOutlined onClick={onclick} />)}</div></div>);
};export default App;

注意其中的NavLink及css中添加的active属性

5、路由鉴权:src/components/auth/index.js

import React, { useEffect } from "react";
// import { useNavigate } from "react-router-dom";
import { Navigate } from "react-router-dom";export default function Auth({ children }) {//判断token是否存在localStorage.setItem("token", "1");const isAuth = localStorage.getItem("token");console.log("isAuth");console.log(isAuth);if (isAuth && Number(isAuth) !== 1) {return <>{children}</>;} else {console.log("没有token请重新登录");console.log(<Navigate to="/admin" />);return <Navigate to="/admin" />;}
}

这篇关于react router v6总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/979660

相关文章

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

HTML5中的Microdata与历史记录管理详解

《HTML5中的Microdata与历史记录管理详解》Microdata作为HTML5新增的一个特性,它允许开发者在HTML文档中添加更多的语义信息,以便于搜索引擎和浏览器更好地理解页面内容,本文将探... 目录html5中的Mijscrodata与历史记录管理背景简介html5中的Microdata使用M

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行

前端下载文件时如何后端返回的文件流一些常见方法

《前端下载文件时如何后端返回的文件流一些常见方法》:本文主要介绍前端下载文件时如何后端返回的文件流一些常见方法,包括使用Blob和URL.createObjectURL创建下载链接,以及处理带有C... 目录1. 使用 Blob 和 URL.createObjectURL 创建下载链接例子:使用 Blob