第十二章 React 路由配置,路由参数获取

一、专栏介绍 🐶🐶

欢迎加入本专栏!本专栏将引领您快速上手React,让我们一起放弃放弃的念头,开始学习之旅吧!我们将从搭建React项目开始,逐步深入讲解最核心的hooks,以及React路由、请求、组件封装以及UI(Ant Design)框架的使用。让我们一起掌握React,开启前端开发的全新篇章!

二、什么是路由 🐭🐭

在React中,路由是用于管理应用程序中不同页面之间的切换和导航的机制。它允许开发人员根据用户在应用程序中的行为,如点击链接或提交表单,来切换不同的组件或页面。最为常见的就是我们的导航菜单,点击菜单以后现实相对应的页面。

三、安装react-router-dom依赖 🐹🐹

npm install react-router-dom --save

react-router-dom是React的一个插件库,专门用来实现单页应用(SPA)的路由管理。它提供了一组组件和API,用于构建单页应用程序的导航和路由,例如链接、路由切换、参数传递等。

通过使用react-router-dom提供的组件和API,可以定义应用程序中的不同页面和路由。这包括定义路由的路径、组件和参数等。

通过使用react-router-dom提供的导航组件,如Link和NavLink,可以在应用程序中实现页面的切换和导航。当用户点击链接或提交表单时,路由会根据定义好的路由配置进行切换。

react-router-dom还提供了参数传递的功能。可以通过定义带有参数的路由,在页面之间传递数据或参数。例如,可以在一个路由中定义一个用户ID参数,然后在另一个路由中使用该参数来获取用户信息。

四、绘制布局 🐰🐰

通常在我们的后台管理系统中,最常用的布局是上下和左右两种方式。其中,上方或左侧为菜单,下方或右侧则对应显示相应的内容。以一种常见的布局为例,即上方为导航条,左侧为菜单,右侧则为显示内容的区域。这样的布局设计能够让用户更加直观地了解系统结构,方便快捷地找到所需的功能和信息。通过合理的布局设计,可以提高用户的使用效率和满意度。

4.1、创建layout 👇👇

分别创建src/layout/Layout.tsx和src/layout/Layout.scss的文件

Layout.tsx

import React from 'react';
import { Outlet, useNavigate } from 'react-router-dom';
import './Layout.scss';const Layout: React.FC = () => {const navigate = useNavigate();const goRouter = (path: string) => {navigate(path);};return (<><div className="ts-layout"><div className="ts-layout-top">这是导航条</div><div className="ts-layout-bottom"><div className="ts-layout-menu"><button onClick={() => goRouter('/')}>首页1</button><button onClick={() => goRouter('home2/007')}>首页2</button><button onClick={() => goRouter('/home3?id=008')}>首页3</button></div><div className="ts-layout-content"><Outlet /></div></div></div></>);
};export default Layout;

Layout.scss

.ts-layout {display: flex;flex-direction: column;width: 100vw;height: 100%;.ts-layout-top {height: 40px;width: 100%;background: #ddd;}.ts-layout-bottom {height: calc(100% - 40px);width: inherit;display: flex;.ts-layout-menu {width: 120px;height: 100%;background: #bdbbbb;display: flex;flex-direction: column;align-items: center;button {width: 80%;}}.ts-layout-content {width: calc(100% - 120px);height: 100%;background: #818080;}}
}

文件目录为

4.2、创建页面 👇👇

分别创建以下三个页面

Home.tsx

import React from 'react';const Home: React.FC = () => {return (<><divstyle={{width: '100%',height: '100%',display: 'flex',alignItems: 'center',justifyContent: 'center',fontSize: '45px',}}>这里是首页Home,路由/</div></>);
};export default Home;

 Home2.tsx

import React from 'react';
import { useParams } from 'react-router-dom';const Home2: React.FC = () => {const { id } = useParams();return (<><divstyle={{width: '100%',height: '100%',display: 'flex',alignItems: 'center',justifyContent: 'center',fontSize: '45px',}}>这里是首页Home2,路由是home2,参数的id为{id}</div></>);
};export default Home2;

 Home3.tsx

import React from 'react';
import { useSearchParams } from 'react-router-dom';const Home3: React.FC = () => {const [searchParams] = useSearchParams();const paramsId = searchParams.get('id');return (<><divstyle={{width: '100%',height: '100%',display: 'flex',alignItems: 'center',justifyContent: 'center',fontSize: '45px',}}>这里是首页Home3,路由是Home3,路由的参数为{paramsId}</div></>);
};export default Home3;

4.3、创建router 👇👇

新建文件src/router/index.tsx

import { createBrowserRouter } from 'react-router-dom';
import Layout from '../layout/Layout';
import Home from '../pages/home/Home';
import Home2 from '../pages/home/Home2';
import Home3 from '../pages/home/Home3';const router = createBrowserRouter([{path: '/',element: <Layout />,children: [{path: '/',element: <Home />,},{path: 'home2/:id',element: <Home2 />,},{path: 'home3',element: <Home3 />,},],},
]);export default router;

4.4、修改App.tsx 👇👇

import React from 'react';
import { RouterProvider } from 'react-router-dom';
import router from './router';
import './global.scss';function App() {return (<div className="App"><RouterProvider router={router} /></div>);
}export default App;

五、效果 🐺🐺

六、配置404页面 🐸🐸

修改路由配置,在最后一个404页面的配置,因为我这里是demo,所有直接写了一个div,自己去扩展成组件,实现更丰富更酷炫直观的页面填充进去就可以了。

import { createBrowserRouter } from 'react-router-dom';
import Layout from '../layout/Layout';
import Home from '../pages/home/Home';
import Home2 from '../pages/home/Home2';
import Home3 from '../pages/home/Home3';
import Login from '../pages/Login';const router = createBrowserRouter([{path: '/login',element: <Login />,},{path: '/',element: <Layout />,children: [{path: '/',element: <Home />,},{path: 'home2/:id',element: <Home2 />,},{path: 'home3',element: <Home3 />,},],},{path: '*',element: <Layout />,children: [{path: '*',element: <div>404,您访问的页面不存在</div>,},],},
]);export default router;

七、总结 🐯🐯

react-router-dom是React中非常重要的一个路由管理库,对于开发React应用程序来说是很有必要学习的。

在React中,react-router-dom可以帮助我们实现页面间的跳转和导航,使得单页应用能够实现多页应用类似的切换效果。通过使用react-router-dom,我们可以定义应用程序中的不同页面和路由,并在用户进行页面跳转或导航时,控制组件的渲染和数据的传递。

学习react-router-dom可以帮助我们更好地理解和掌握React应用程序的开发和导航管理,提高开发效率和代码可维护性。特别是在构建大型复杂的单页应用程序时,路由管理的重要性更加突出。因此,对于想要深入开发React应用程序的开发者来说,学习和掌握react-router-dom是非常必要的。

👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇

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

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

相关文章

0基础学java-day19(IO流)

一、文件 1 什么是文件 2.文件流 3.常用的文件操作 3.1 创建文件对象相关构造器和方法 package com.hspedu.file;import org.junit.jupiter.api.DynamicTest; import org.junit.jupiter.api.Test;import java.io.File; import java.io.IOException;/*** author 林然* vers…

js根据数组对象中的某个值去重

原理&#xff1a;利用对象key-value进行去重 去重方法&#xff1a; // 数组对象根据某一个值去重 filterList(list[], key) {let obj {};list?.forEach(item>{obj[item[key]]item;});return Object.values(obj); }, 用法&#xff1a; let list [{id: 1, name: 1},{id…

【TI毫米波雷达入门-11】毫米波速度相关计算

知识回顾 傅里叶变换 信号用复数表示&#xff0c;A :振幅&#xff0c; Q &#xff1a;相位 中频 信号 中频信号的相位 中频信号的表达公式 频率和相位的表达方式 使用两个Chirp 实现单个目标的测量 两个连续的chirp &#xff0c;检测目标的相位差&#xff0c;通过速度和时间的关…

7+乳酸化+分型+实验,怎么贴合热点开展实验,这篇文章给你思路

今天给同学们分享一篇生信文章“Identification of lactylation related model to predict prognostic, tumor infiltrating immunocytes and response of immunotherapy in gastric cancer”&#xff0c;这篇文章发表在Front Immunol期刊上&#xff0c;影响因子为7.3。 结果解…

基于java的小型超市管理系统论文

摘 要 使用旧方法对超市信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在超市信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。 这次开发的小型超市管理系统有管理…

uniapp 数组添加不重复元素

一、效果图 二、代码 //点击事件rightBtn(sub, index) {console.log(sub, index)//uniapp 数组添加不重复元素if (this.selectList.includes(sub.type)) {this.selectList this.selectList.filter((item) > {return item ! sub.type;});} else {this.selectList.push(sub.t…

Java实现ZIP算法压缩和解压操作

ZIP是一种流行的文件压缩格式&#xff0c;它可以将多个文件打包成一个文件&#xff0c;以减小文件大小并方便传输。ZIP文件可以在大多数操作系统和软件中解压缩&#xff0c;例如Windows、Mac和Linux系统上的许多文件管理器和解压缩工具。ZIP压缩可以使用许多不同的压缩算法&…

【DEBUG】plt.cm.hot 的归一化问题

可视化时调用 # Matplotlib有很多内置的colormap&#xff0c;比如jet, viridis, hot等colormap plt.cm.hot # 选择一个colormapimg img.astype(np.float64) # 为了进行归一化&#xff0c;自动转换时float32norm plt.Normalize(vminimg.min(), vmaximg.max()) # 标准化灰度…

365锦鲤助手 砍价小程序源码 流量主引流裂变

源码介绍 修改版365锦鲤 助手&#xff0c; 砍价小程序源码 流量主引流裂变 拼多多商品快速丰富产品内容满足广大用户需求&#xff1b;流量矩阵让流量都进你的圈子飞起来&#xff1b;长期盈利、项目稳定 1.后台安装微擎 2安装应用 后台打包上传

23.12.10日总结

周总结 这周三的晚自习&#xff0c;学姐讲了一下git的合作开发&#xff0c;还有懒加载&#xff0c;防抖&#xff0c;节流 答辩的时候问了几个问题&#xff1a; 为什么在js中0.10.2!0.3? 在js中进行属性运算时&#xff0c;会出现0.10.20.300000000000000004js遵循IEEE754标…

【有限元仿真】or【流体仿真】

流体和刚体的关系&#xff1f; 刚体仿真关注刚性物体的运动和力学行为。刚体是指在外力作用下保持形状和结构不变的物体&#xff0c;不受弯曲或拉伸的影响。刚体仿真基于刚体力学原理和刚体运动学方程&#xff0c;模拟刚体的运动、转动、碰撞等行为。它可以用于模拟刚体之间的…

Mysql进阶-InnoDB引擎事务原理及MVCC

事务原理 事务基础 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系 统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 事务的四大特性&#xff1a; 原子性&#xff08;A…

记录 | docker启动权限问题Get Permission Denied

docker 启动报错权限问题&#xff1a; Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json”: dial unix /var/run/docker.sock: connect: permission d…

el-upload添加FormData参数,自定义上传接口

添加 :http-request"selfUpload"&#xff1a; <el-upload:disabled"saveLoading"class"upload-demo":limit"1":on-exceed"handleExceed":before-upload"beforeAvatarUpload":file-list"fileList":a…

电商软件定制开发数字化四大新趋势

近年来&#xff0c;电商软件定制化开发已经成为一种新趋势。得益于技术进步、用户需求个性化以及市场竞争的加剧。越来越多的企业开始认识到&#xff0c;为了在激烈的市场竞争中脱颖而出&#xff0c;他们需要一款高度定制化的电商软件来满足自身的特定需求。在电商软件定制开发…

【深度学习目标检测】五、基于深度学习的安全帽识别(python,目标检测)

深度学习目标检测方法则是利用深度神经网络模型进行目标检测&#xff0c;主要有以下几种&#xff1a; R-CNN系列&#xff1a;包括R-CNN、Fast R-CNN、Faster R-CNN等&#xff0c;通过候选区域法生成候选目标区域&#xff0c;然后使用卷积神经网络提取特征&#xff0c;并通过分类…

Android audio pop 音产生和解决方法

一、pop音产生原因 pop noise其实是隔直电容被充电产生。 二、pop音解决办法 1.插入模拟LPF 一般比较困难&#xff0c;pop noise是由于音频路径上隔直电容两端上电时候的压差而导致快速充电产生的&#xff0c;一般是在Audio PA的输入RC LPF上作调整&#xff0c;通过减小串联…

Qt图像处理-基于OpenCv的图像的腐蚀、膨胀、打开、关闭

一、概述 膨胀、腐蚀、开、闭运算是数学形态学最基本的变换。 膨胀:把二值图像各1像素连接成分的边界扩大一层(填充边缘或0像素内部的孔); 腐蚀:把二值图像各1像素连接成分的边界点去掉从而缩小一层(可提取骨干信息,去掉毛刺,去掉孤立的0像素); 开:先腐蚀再膨胀…

[Stream]自定义的Collect筛选

这里使用map就是让map中的内容作用到s上去 然后我们在map(s->{})中的部分完成了筛选 并且返回一个Actor类型的值 import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.function.Function; import java.util.stream.Colle…

安装Nacos2.2.3集群

目录 一、传统方式安装 二、Docker安装 一、传统方式安装 1、配置jdk环境 vi /etc/profile JAVA_HOME/usr/local/java JRE_HOME/usr/local/java/jre CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib PATH$JAVA_HOME/bin:$PATH export PATH JAVA_…