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

相关文章

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

HTML input 标签示例详解

《HTMLinput标签示例详解》input标签主要用于接收用户的输入,随type属性值的不同,变换其具体功能,本文通过实例图文并茂的形式给大家介绍HTMLinput标签,感兴趣的朋友一... 目录通用属性输入框单行文本输入框 text密码输入框 password数字输入框 number电子邮件输入编程框

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

HTML5 中的<button>标签用法和特征

《HTML5中的<button>标签用法和特征》在HTML5中,button标签用于定义一个可点击的按钮,它是创建交互式网页的重要元素之一,本文将深入解析HTML5中的button标签,详细介绍其属... 目录引言<button> 标签的基本用法<button> 标签的属性typevaluedisabled

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,