React路由 基本使用 嵌套路由 动态路由 获取路由参数 异步路由 根据配置文件来生成路由

在这里插入图片描述

文章目录

      • React-router的三个版本
      • react-router使用
        • 嵌套路由
        • 动态路由
      • 获取路由参数
        • Params参数
        • Query参数
        • Location信息
      • 控制跳转地址
      • 异步路由
      • 根据配置文件生成路由

React-router的三个版本

  1. React-router 服务端渲染使用
  2. React-router-dom 浏览器端渲染使用
  3. React-router-native React-native混合开发使用
    其中React-router-dom用的最多

react-router使用

安装pnpm i react-router-dom

react全局插件的使用方式
React中没有vue那样的vue.use react中使用一个插件,库,都是引入一个组件,然后把要用该插件的部分包起来

通过BroserRouter或者HashRouter包裹要使用路由的根组件
在你想使用的组件上,这里不止根组件,任何组件包裹都可使用路由 非常方便

import { createRoot } from 'react-dom/client'import App from './App.tsx'import {BrowserRouter,HashRouter}from 'react-router-dom';createRoot(document.getElementById('root')!).render(<BrowserRouter><App /></BrowserRouter>)

使用Routes组件,定义路由显示区域
使用Route组件,定义具体路由规则
使用NavLink或者Link组件,定义跳转链接
NavLink会在当前组件加个active类名这也是他与Link组件的区别

import {Routes,Route,NavLink}from 'react-router-dom';import Page1 from './page1'import Page2 from './page2'import Page3 from './page3'import Page4 from './page4'function App() {return (<><h1>菜单</h1><div><NavLink to="/page1">page1</NavLink><NavLink to="/page2">page2</NavLink><NavLink to="/page3">page3</NavLink><NavLink to="/page4">page4</NavLink></div><Routes><Route path="/page1" element={<Page1></Page1>}></Route><Route path="/page2" element={<Page2></Page2>}></Route><Route path="/page3" element={<Page3></Page3>}></Route><Route path="/page4" Component={Page4}></Route></Routes></>)}
嵌套路由

Navigate-路由重定向
Outlet,嵌套路由的子路由显示处

//page1.tsx
import {Outlet} from 'react-router-dom'export default function page1 (){return (<><h1>page1</h1><Outlet></Outlet></>)}
//app.tsx
<Route path="/page1" element={<Page1></Page1>}><Route path="son" element={<Page1Son></Page1Son>}></Route></Route>
动态路由
<Route path="/page3/:id" element={<Page3></Page3>}></Route>

获取路由参数

Params参数
import {useParams} from 'react-router-dom'export default function page3 (){let params = useParams()console.log(params);return <h1>page3</h1>}
Query参数
//地址栏信息http://localhost:5173/page4?a=123&b=456
import {useSearchParams} from "react-router-dom"export default function page4 (){let [searchparams,setSearchParams] = useSearchParams();console.log(searchparams.get('a'))return (<><h1>page4</h1><button onClick={() => {setSearchParams({a:"666",b:"777"})}}>改变</button></>)}
Location信息
import {useLocation}from 'react-router-dom'export default function page2 (){let location = useLocation();console.log(location);return <h1>page2</h1>}

控制跳转地址

useNavigate创建跳转方法 然后跳转

import {Outlet,useNavigate} from 'react-router-dom'export default function page1 (){let nav = useNavigate()return (<><h1>page1</h1><Outlet></Outlet><button onClick={() => {nav("/page2",{state:{token:"hello"}})}}></button></>)}

异步路由

React做异步路由,要配合导react本身的一个方法-lazy和一个组件suspense

<Route path="/page4" element={<Suspense fallback={<h2>加载中...</h2>}><LazyPage4 /></Suspense>}></Route>

根据配置文件生成路由

//routerArr.tsx
import Page1 from '../page1'import Page2 from '../page2'import Page3 from '../page3'import Page4 from '../page4'
export default [{path:'/page1',component:Page1},{path:'/page2',component:Page2},{path:'/page3',component:Page3},{path:'/page4',component:Page4},]
//router.tsx
import {Route} from 'react-router-dom'const RouterMap = (routerArr:any) => {return routerArr.map((item:any) => {return <Route path={item.path} Component={item.component} ></Route>})}export default RouterMap
//app.tsx
<Routes>{ RouterMap(routerArr)}</Routes>

本篇文章到这里就结束了,如果对你有用的话就点个关注吧 会持续更新技术文章

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Electron入门笔记

Electron入门笔记 ElectronElectron 是什么Electron流程模型创建第一个Electron项目配置自动重启主进程和渲染进程通信打包应用 Electron Electron 是什么 跨平台的桌面应用开发框架使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium和 Node.js Electro…

基于System.js的微前端实现(插件化)

目录​​​​​​​ 写在前面 一、微前端相关知识 &#xff08;一&#xff09;概念 &#xff08;二&#xff09; 优势 &#xff08;三&#xff09; 缺点 &#xff08;四&#xff09;应用场景 &#xff08;五&#xff09;现有框架 1. qiankun 2. single-spa 3. SystemJ…

机器学习课程学习周报十七

机器学习课程学习周报十七 文章目录 机器学习课程学习周报十七摘要Abstract一、机器学习部分1. 变分推断/推理1.1 证据下界1.2 q ( z ) {q(z)} q(z)的选取 2. VAE2.1 Auto-Encoder的简单回顾2.2 为什么提出VAE2.3 VAE的数学原理 3. Diffusion Model的数学原理3.1 Training算法…

【C语言】递归函数变量的作用域

变量的作用域 全局变量&#xff1a;在整个程序内可以识别&#xff0c;且唯一。 局部变量&#xff1a;仅在当前函数内有效&#xff0c;比如main函数、用户自定义函数。 递归函数 指的是一类函数&#xff0c;函数调用自身&#xff0c;包括递推和回归。使用递归的方式&#xff0c…

JavaWeb 19 AJAX

目录 一、什么是AJAX 同步交互和异步交互 同步交互 异步交互 Ajax工作原理 Ajax实现方式 原生JavaScript方式进行ajax(了解)&#xff1a; "我就是希望你好&#xff0c;就像很多人希望我好一样&#xff0c;特别简单&#xff0c;特别真挚。也不为了什么&#xff0c;就是希望…

从0开始深度学习(14)——模型选择、欠拟合、过拟合

① 模型在训练数据上拟合的比在潜在分布中更接近的现象&#xff0c;就叫过拟合&#xff08;overfitting&#xff09; ② 用于对抗过拟合的技术称为正则化&#xff08;regularization&#xff09; 1 训练误差和泛化误差 ①训练误差&#xff08;training error&#xff09;&…

Gee引擎配置微端后登录游戏黑屏怎么办?

GEE引擎配置微端后登录游戏黑屏怎么办&#xff1f;今天飞飞和你们分享GEE引擎配置微端后游戏黑屏的解决办法&#xff0c;希望可以帮助到你~ 1、端口不对 微端没有更新&#xff0c;玩家进入游戏是地图跟装备都看不见&#xff0c;是漆黑的&#xff0c;微端显示连接失败&#xff…

c语言字符串函数strstr,strtok,strerror

1&#xff0c;strtok函数的使用和模拟实现 char * strtok(char * str,const char * sep) 会有static修饰变量&#xff0c;有记忆功能&#xff0c;会保存字符串的位置&#xff0c;下次找再继续找。 1)sep参数指向一个字符串&#xff0c;它包含了0个或者多个由sep字符中一个或…

极客wordpress模板

这是一个展示WordPress主题的网页设计。页面顶部有一个导航栏&#xff0c;包含多个选项&#xff0c;如“关于我们”、“产品中心”、“案例展示”、“新闻动态”、“联系我们”和“技术支持”。页面中间部分展示了多个产品&#xff0c;每个产品都有一个图片和简短的描述。页面下…

JUC并发编程进阶2:CompletableFuture

1 Future接口理论知识复习 Future接口&#xff08;FutureTask实现类&#xff09;定义了操作异步任务执行一些方法&#xff0c;如获取异步任务的执行结果、取消异步任务的执行、判断任务是否被取消、判断任务执行是否完毕等 举例&#xff1a;比如主线程让一个子线程去执行任务…

TCP(三次握手)和UDP(面向无连接)的原理以及区别

TCP(三次握手)和UDP&#xff08;面向无连接&#xff09;的原理以及区别 网络协议是每个前端工程师都必须要掌握的知识&#xff0c;TCP/IP 中有两个具有代表性的传输层协议。 概述 &#x1f4e1;TCP&#xff08;Transmission Control Protocol&#xff09;是一种网络协议&#…

【opengles】笔记1:屏幕坐标与归一化坐标(NDC)的转换

参考资料 OpenGL希望在所有顶点着色器运行后&#xff0c;所有我们可见的顶点都变为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说&#xff0c;每个顶点的x&#xff0c;y&#xff0c;z坐标都应该在-1.0到1.0之间&#xff0c;超出这个坐标范围的顶点都将不可见。…

【Python】NumPy(二):数组运算、数据统计及切片索引、广播机制

目录 Numpy数组 数组的基本运算 乘法 加法 数组的数据统计 平均值 中位数 最大值和最小值 求和 累积和 标准差 方差 切片和索引 索引 一维数组的索引 二维数组的索引 获取多个元素 布尔索引 切片 一维数组切片 二维数组切片 多维数组切片 广播机制 规则 …

Seata序列化优化

Apache Seata(incubating) 是一款开源的分布式事务解决方案&#xff0c;致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 本篇文章主要介绍Seata序列化实现优化。Seata对于网络传输数据&#xff0c;提供了多种序列化实现&#xff0c;包含Seata自身的序列化实现、…

一元n次多项式加法【数据结构-链表】

一元n次多项式定义如下&#xff1a; 其中Ai​为实数&#xff0c;i为不小于0的整数。在完成“一元n次多项式输入输出”题目的基础上实现一元n次多项式的加法。要求用链表实现上述一元n次多项式的操作。 输入格式: 有两个一元n次多项式&#xff0c;例如分别为&#xff1a; f(X)…

80.【C语言】数据结构之时间复杂度

目录 1.数据结构的定义 2.算法的定义 3.算法的效率 1.衡量一个算法的好坏的方法 例题:计算以下代码的循环次数 2.大O的渐进表示法 练习1:求下列代码的时间复杂度 练习2:求下列代码的时间复杂度 练习3:求下列代码的时间复杂度 练习4:求下列代码的时间复杂度 4.总结:计…

Leetcode—1115. 交替打印 FooBar【中等】(多线程)

2024每日刷题&#xff08;180&#xff09; Leetcode—1115. 交替打印 FooBar C实现代码 class FooBar { private:int n;sem_t fooSem;sem_t barSem;public:FooBar(int n) {this->n n;sem_init(&fooSem, 0, 1);sem_init(&barSem, 0, 0);}~FooBar() {sem_destroy(&…

mac安装brew时踩坑解决方案

安装包 mac上如果按照git等工具可能会使用brew&#xff0c;例如使用&#xff1a;$ brew install git命令&#xff0c;如果电脑没有按照brew&#xff0c;则会提示&#xff1a;zsh: command not found: brew 解决方案 需要我们打开brew的官网https://brew.sh/&#xff0c;复制…

机器学习|Pytorch实现天气预测

机器学习|Pytorch实现天气预测 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 电脑系统&#xff1a;Windows11 显卡型号&#xff1a;NVIDIA Quadro P620 语言环境&#xff1a;python 3.9.7 编译器&#x…

得物App3D创新应用引关注,世界设计之都大会启幕

近日&#xff0c;2024世界设计之都大会&#xff08;WDCC&#xff09;在上海盛大启幕。此次大会以“设计无界 新质生长”为主题&#xff0c;汇聚了全球设计领域的精英与前沿成果&#xff0c;展现了设计作为新质生产力的巨大潜力。主场展览占据了整整3个楼面&#xff0c;总面积达…