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>

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

API项目3:API签名认证

问题引入 我们为开发者提供了接口&#xff0c;却对调用者一无所知 假设我们的服务器只能允许 100 个人同时调用接口。如果有攻击者疯狂地请求这个接口&#xff0c;那是很危险的。一方面这可能会损害安全性&#xff0c;另一方面耗尽服务器性能&#xff0c;影响正常用户的使用。…

若依前后端分离版本el-select下拉框字典如何设置默认值。

在若依前后端分离框架中&#xff0c;如何给下拉框设置默认值&#xff0c;刚入门的小伙伴&#xff0c;可能会不知道如何去做。 本章教程&#xff0c;主要以用户管理模块中的添加用户举例说明如何设置用户性别默认值为男。 解决思路 首先&#xff0c;我们需要找到打开新增页面的方…

【工具】前端js数字金额转中文大写金额

【工具】前端js数字金额转中文大写金额 代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>金额转…

多功能点击器(文末附Gitee源码)——光遇自动弹奏

之前提到的多功能点击器&#xff0c;使用场景比较多&#xff0c;之前玩光遇喜欢在里面弹琴&#xff0c;想到用这个点击器也能自动弹琴&#xff0c;跟别的自动弹琴脚本不一样&#xff0c;这个比较简单容易操作。 借这个光遇自动弹琴使用教程再讲解一下这个多功能点击头的使用方法…

ModelMapper的常见用法 ,号称是beanUtils.copyProp....的升级版??,代码复制粘贴即可复现效果,so convenient

官网案例 以下将官网案例做一个解释 1&#xff09;快速入门 递归遍历源对象的属性拷贝给目标对象 拷贝对象下对象的属性值 Data class Order {private Customer customer;private Address billingAddress; }Data class Customer {private Name name; }Data class Name {pr…

在三维可视化项目中,B/S和C/S架构该如何选择?

一、什么是B/S和C/S 在3D数据可视化中&#xff0c;有两种常见的架构模式&#xff1a;BS&#xff08;Browser/Server&#xff09;和CS&#xff08;Client/Server&#xff09; B/S模式 B/S模式是指将3D数据可视化的逻辑和处理放在服务器端&#xff0c;而在客户端使用浏览器进行…

智能汽车智能网联

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c;多看一眼都是你的不…

rom定制系列------小米6x_MIUI14_安卓13刷机包修改写入以及功能定制 界面预览

在接待一些定制化系统中。有很多工作室或者一些特殊行业的友友需要在已有固件基础上简略修改其中的功能。方便使用。例如usb调试默认开启。usb安装设置以及usb安装与内置删减一些app的定制服务。今天给友友预览其中小米6X此款机型定制相关的一些界面与功能演示。 定制机型以及…

公司新来的00后测试开发,让我对“跨界”二字有了全新认识

最近&#xff0c;我们部门迎来了一位新面孔——一个00后的年轻人&#xff0c;阿沅。初见他时&#xff0c;我以为他只是众多新入职员工中的普通一员&#xff0c;毕竟他的专业背景与我们的IT行业似乎相去甚远——广告学。然而&#xff0c;他的到来&#xff0c;却如同一阵清风&…

IDEA中的Postfix Completion与Live Templates功能详解

目录 前言1. Postfix Completion&#xff08;后缀补全&#xff09;1.1 什么是Postfix Completion1.2 使用Postfix Completion的步骤1.3 Postfix Completion的具体应用1.4 自定义Postfix Completion 2. Live Templates&#xff08;实时模板&#xff09;2.1 什么是Live Templates…

聊聊 Facebook Audience Network 绑定收款账号的问题

大家好&#xff0c;我是牢鹅&#xff01;本篇是Facebook开发者系列的第五篇&#xff0c;最近看见好多群友在群里问这个&#xff0c;说Facebook的变现账户在绑定国内的银行账户时&#xff08;有些用户反馈就算不是国内的卡也会出现该问题&#xff09;&#xff0c;显示“无法绑定…

【WRF工具】QGis插件GIS4WRF:根据嵌套网格生成namelist.wps文件

【WRF工具】QGis插件GIS4WRF:根据嵌套网格生成namelist.wps文件 准备:WRF嵌套网格QGis根据嵌套网格生成namelist.wps文件检查:根据namelist.wps绘制模拟区域参考GIS4WRF 是一个免费且开源的 QGIS 插件,旨在帮助研究人员和从业者进行高级研究天气研究与预报(WRF)模型的建模…

利用可解释性技术增强制造质量预测模型

概述 论文地址&#xff1a;https://arxiv.org/abs/2403.18731 本研究提出了一种利用可解释性技术提高机器学习&#xff08;ML&#xff09;模型性能的方法。该方法已用于铣削质量预测&#xff0c;这一过程首先训练 ML 模型&#xff0c;然后使用可解释性技术识别不需要的特征并去…

Lucene 倒排索引

倒排索引是什么&#xff1f; 【定义】倒排索引&#xff08;Inverted Index&#xff09;是一种用于信息检索的数据结构&#xff0c;尤其适用于文本搜索。它与传统索引的主要区别在于&#xff0c;传统索引是根据文档来查找词语的位置&#xff0c;而倒排索引则是根据词语来查找文…

vmware虚拟机 报错:客户机操作系统已禁用 CPU,请关闭或重置虚拟机 的解决方法

打开cpu虚拟化全部进行勾选 ctrl e 进行关机 勾选上打开就好了 如果没有那个选项 关机>打开虚拟机>管理>更改硬件兼容性> 往小处改改> >更改此虚拟机

MySQL连接查询:联合查询

先看我的表结构 emp表 联合查询的关键字&#xff08;union all, union&#xff09; 联合查询 基本语法 select 字段列表 表A union all select 字段列表 表B 例子&#xff1a;将薪资低于5000的员工&#xff0c; 和 年龄大于50 岁的员工全部查询出来 第一种 select * fr…

x-file-storage:一款强大的文件聚合存储解决方案

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 dromara/x-file-storage 是一个由 Dromara 社区开发和维护的开源项目&#xff0c;旨在提供一个高效、可靠的文件存储解决方案。该项目以其强大的功能和…

正则表达式-“三剑客”(grep、sed、awk)

1.3正则表达式 正则表达式描述了一种字符串匹配的模式&#xff0c;可以用来检查一个串是否含有某种子串&#xff0c;将匹配的子串替换或者从某个串中取出符号某个条件的子串等&#xff0c;在linux中代表自定义的模式模版&#xff0c;linux工具可以用正则表达式过滤文本。Linux…

新版 Notepad++ 下载与安装教程

一、软件准备&#xff1a;麻烦点我 二、双击下载好的 notepad 软件进行安装&#xff0c;选择 “简体中文”。 三、默认 “下一步” 安装。 四、单击 “我接受” 按钮。 五、自定义安装位置&#xff0c;个人建议安装在 D 盘。 六、选择组件&#xff0c;默认 “下一步”。 七、勾…

通过OpenCV实现 Lucas-Kanade 算法

目录 简介 Lucas-Kanade 光流算法 实现步骤 1. 导入所需库 2. 视频捕捉与初始化 3. 设置特征点参数 4. 创建掩模 5. 光流估计循环 6. 释放资源 结论 简介 在计算机视觉领域&#xff0c;光流估计是一种追踪物体运动的技术。它通过比较连续帧之间的像素强度变化来估计图…