几分种学会React Router v6使用

news2024/11/27 14:45:32

React路由可以实现页面间的切换。
传送门:英文文档
中文教程:
https://www.reactrouter.cn/docs/getting-started/tutorial

1.基础使用

react
需求:实现一个普通的底部导航切换
在这里插入图片描述

1.安装react-router

npm i react-router-dom@6

2.配置根组件app.js

import { React, lazy, Suspense } from "react";

// 导入 Route, Routes 等核心组件
import { Route, Routes, BrowserRouter ,HashRouter } from "react-router-dom";
import Home from "./components/Home";
import About from "./components/About";
import User from "./components/User";
import PageNotFound from "./components/PageNotFound";
import Recommond from "./components/Recommand";
import JapenAnimate from "./components/JapenAnimate";
import ChineseAnimate from "./components/ChineseAnimate";
import NewAnimate from "./components/NewAnimate";

function App() {
  return (
  	<BrowserRouter>
	    <Routes>
	      <Route path="/" element={<Home />}></Route>
	      <Route path="/home" element={<Home />}>
	        <Route path="/home/" element={<Recommond />} />
	        <Route path="/home/recommand" element={<Recommond />} />
	        <Route path="/home/new-animate" element={<NewAnimate />} />
	        <Route path="/home/japan-animate" element={<JapenAnimate />} />
	        <Route path="/home/chinese-animate" element={<ChineseAnimate />} />
	      </Route>
	      <Route path="/user" element={<User />} />
	      <Route path="/about" element={<About />} />
	      <Route path="*" element={<PageNotFound />} />
	    </Routes>
  	</BrowserRouter>
  );
}

export default App;

两种常用Router:BrowserRouter 、HashRouter
作用:包裹整个应用,只要在页面中写在最外层一次就行了。
BrowserRouter (推荐)
使用H5的history.pushState API实现 ,url显示效果(http://localhost:3000/home)
HashRouter
使用URL的哈希值实现,url显示效果(http://localhost:3000/#/home

配置路由语法:

    <Routes>
      <Route path="/" element={<Home />} />
      <Route path="/user" element={<User />} />
      <Route path="/about" element={<About />} />
    </Routes>

Routes标签包裹着一个个路由,path对应路径,element对应导入的组件。

配置当无匹配项时,额外的404页面:

 <Route path="*" element={<PageNotFound />} />

4.配置Link链接(如果是导航的话推荐用NavLink)

// 导入NavLink
 import { NavLink } from "react-router-dom";

-------------
 // 使用,to表示跳转链接
  <NavLink to='/home'>

5.配置导航激活状态

1) 设置active的css

Link 或者 NavLink都会被编译成a标签,并且激活时会自带一个active的类,简单的css,我们可以直接设置该a标签的active类属性。

2)通过activeStyle={} api属性设置激活时候的属性。

3)通过回调函数可以设置更复杂的操作(如导航激活图片的更换)

<NavLink to='/home'>
	{(isActive)=>{
		// isActive表示该Link是否处于激活状态
	}
</NavLink>

6. 基本的嵌套路由

用法参考下面


    <Routes>
      <Route path="/" element={<Home />}></Route>
      <Route path="/home" element={<Home />}>
        <Route path="/home/" element={<Recommond />} />
        <Route path="/home/recommand" element={<Recommond />} />
        <Route path="/home/new-animate" element={<NewAnimate />} />
        <Route path="/home/japan-animate" element={<JapenAnimate />} />
        <Route path="/home/chinese-animate" element={<ChineseAnimate />} />
      </Route>
      <Route path="/user" element={<User />} />
      <Route path="/about" element={<About />} />
      <Route path="*" element={<PageNotFound />} />
    </Routes>

Outlet占位:
注意在使用时,需要配合 Outlet 标签对子路由进行占位,Outlet你可以决定放在父路由页面的任意位置。
语法

import { Outlet } from "react-router-dom";

// 占位
<Outlet />

举个例子:

import TabBar from "../../common/TabBar";
import Tabs from "../Tabs";
import { Outlet } from "react-router-dom";
import SearchBar from "../SearchBar/index";
function Home() {
  return (
    <div>
      <div>
        <SearchBar />
        <Tabs />
        <Outlet />
        <TabBar />
      </div>
    </div>
  );
}
export default Home;

我把Outlet放在tabs的下面,tabbar的上面,就是这种效果:
在这里插入图片描述

默认渲染一级路由 path=‘/’
默认渲染二级路由,去掉path,添加index属性。

 <Route index element={<Recommond />} />

2.进阶使用

编程式导航跳转

作用:通过js编程的方式进行路由页面跳转,比如从登录界面跳转到关于页。
语法说明:
1.导入useNavigate钩子函数
2.执行钩子函数得到跳转函数
3.执行跳转函数完成跳转

注意:如果在跳转时不想加历史记录,可以添加额外参数replace为true

import { useNavigate } from "react-router-dom";
------------------------
  const navigate = useNavigate();
  const goHome = () => {
    navigate("/home", { replace: true });
  };
------------------------------
      <button onClick={goHome}></button>

跳转携带参数:有时候不光需要跳转还需要传递参数。

  1. searchParams
    传参
navigate('/about?id=1001')

取参

let [params] = useSearchParams()
let id = params.get('id')
  1. params 传参
    传参
navigate('/about/1001')

取参

let params = useParams()
let id = params.id

抽离路由配置文件

编写渲染路由函数

1.懒加载路由

整合Link使用

更多好文章传送门:https://www.cnblogs.com/operate/p/16082907.html
https://www.jianshu.com/p/e50011ce67cc

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

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

相关文章

C#调试与测试 | DebuggerDisplay使用技巧

DebuggerDisplay使用技巧 文章目录DebuggerDisplay使用技巧前言DebuggerDisplay介绍示例代码前言 当你在开发一个大型的应用程序时&#xff0c;调试是一个不可避免的任务。调试器是你的好朋友&#xff0c;但是有时候它并不能直接给你所需的信息。这时&#xff0c;就需要使用 C…

线上问题排查异闻录

如何解决堆内存溢出问题 OOM有很多种情况啊&#xff0c;这里就先讲解最常见也是最容易观测的java.lang.OutOfMemoryError: Java heap space&#xff0c;也就是堆内存溢出。 发现 启动Java程序的时候&#xff0c;最好参数加上-XX:HeapDumpOnOutOfMemoryError&#xff0c;该参…

【RabbitMQ】RabbitMQ控制台的使用

一、访问控制台页面 如果在本机上装了RabbitMQ则在浏览器访问127.0.0.1:15672,如果在服务器装了RabbitMQ则通过在浏览器输入urlip:15762来访问 登录后进入主页 二、添加RabbitMQ用户 进入主页后选择Admin&#xff0c;对应找到添加用户选择输入信息后即可完成添加 三、添加Rab…

GROUP BY 与 聚合函数、 HAVING 与 ORDER BY-MySQL数据库 - 分组选择数据(头歌实践教学平台)

文章目的初衷是希望学习笔记分享给更多的伙伴&#xff0c;并无盈利目的&#xff0c;尊重版权&#xff0c;如有侵犯&#xff0c;请官方工作人员联系博主谢谢。 目录 第1关&#xff1a;GROUP BY 与 聚合函数 任务描述 相关知识 GROUP BY与聚合函数的使用 编程要求 第2关&…

交通 | 应用Benders分解方法解决多车生产路由问题

论文解读​ 曲晨辉&#xff0c;王飞龙 1 知识补充和文章贡献 2.1 IRP (Inventory routing problems) IRP关注的是在一个给定的规划范围内&#xff0c;从一个设施到一组客户的单一产品分配。客户以给定的速度消费产品&#xff0c;并可将产品的库存维持在一个特定的水平上。一组…

HTB-SolidState

HTB-SolidState信息收集80端口Apache Jamesmindyrbash绕过mindy -> root总结信息收集 80端口 目录扫描 从/README.txt文件里知道他们在捣鼓一个新的秘密项目&#xff0c;这个新的秘密项目就是一个新的网页外观。 80端口先点到为止&#xff0c;免得进兔子洞。 Apache James …

基于SpringBoot技术点餐系统的设计与实现(论文+源码)_kaic

摘 要 饮食行业的发展推动了服务的提升&#xff0c;在线点餐服务模式随之产生。相比于传统点餐&#xff0c;在线点餐更加方便地浏览菜品&#xff0c;挑选菜品&#xff0c;有更好的用餐体验。系统的使用减少了人工成本&#xff0c;方便数据统计&#xff0c;便于提供更优质的服务…

大数据学习路线图(2023完整版)适合收藏

大数据开发是一门涉及处理和分析大规模数据的技术领域&#xff0c;随着大数据技术的不断发展和应用&#xff0c;对大数据开发人员的需求也在逐渐增加。就业前景相对较好&#xff0c;尤其在科技行业和数据驱动型企业中。大数据开发的前景还是有很多优势的&#xff0c;就业范围广…

Ubuntu14.04+ROS-indigo版本安装教程

ROS之indigo版本安装教程 1、Ubuntu14.04安装&#xff08;indigo对应的ubuntu版本是14.04&#xff09; Ubuntu14.04 的下载地址https://www.releases.ubuntu.com/14.04/ 64位的电脑下载如下图 在虚拟机上配置了该镜像&#xff08;我用的是VMware虚拟机&#xff09; 2、ROS …

mac苹果电脑运行慢卡顿如何释放内存?

苹果电脑受到大众追捧的大部分原因是她高效的运行速度&#xff0c;为我们带来了很大的方便。但是大家有没有发现经过几年时间后&#xff0c;现在自己的苹果电脑运行速度没有以前快了呢&#xff1f;导致苹果电脑变慢的原因有哪些&#xff1f;苹果电脑变慢了怎么办&#xff1f;小…

平凡的Python为什么能一跃成为世界排名第一的语言

本文首发自「慕课网」&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"&#xff01; 作者&#xff1a;大周|慕课网讲师 一、前言 本文将结合个人经历为各位同学客观的分析是否有学习Python的必要、Python适合谁学、为什么…

webgl-画三角形

html <!DOCTYPE html> <head> <style> *{ margin: 0px; padding: 0px; } </style> </head> <body> <canvas id webgl> 您的浏览器不支持HTML5,请更换浏览器 </canvas> <script src"./main.js"></script&g…

007:Mapbox GL实现地图地点搜索定位功能

第007个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中实现地图地点搜索定位功能 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共68行)安装插件相关API参考:专栏目标示例效果 配置方式 1)查看基础设…

linux 命名管道 mkfifo

专栏内容&#xff1a;linux下并发编程个人主页&#xff1a;我的主页座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物&#xff0e;目录 前言 概述 原理介绍 接口说明 代码演示 结尾 前言 本专栏主要分享linux下并发编程…

HBU 2023 Simple problem set

目录 7-1 递推公式 7-2 存钱罐 7-3 买东西 7-4 双重子串 7-5 放小球 7-6 最短路径 7-7 统计子序列的个数 7-8 摆放灯笼 7-9 选零食 7-10 1还是2 7-11 最少的门禁数量 7-12 青春猪头之开学了要好好学习 7-13 青春猪头之毕设真头大 7-14 青春猪头之我没学过C语言 7-15 发射小球 7…

FreeRTOS 列表和列表项

文章目录一、什么是列表和列表项&#xff1f;二、列表和列表项初始化三、列表项插入四、列表项末尾插入五、列表项的删除六、列表的遍历七、列表项的插入和删除实验一、什么是列表和列表项&#xff1f; 1. 列表 列表是 FreeRTOS 中的一个数据结构&#xff0c;概念上和链表有点…

【九】springboot启动源码 - refreshContext结束后

afterRefresh 钩子函数,默认实现为空 listeners.started 执行实现SpringApplicationRunListener的started回调 通用处理 this.listeners在之前已经通过SPI加载 获取SpringApplicationRunListener的实现类 EventPublishingRunListener 推送ApplicationStartedEvent事件…

红队内网靶场

文章目录开篇介绍靶场介绍靶场下载以及配置Tomcat Get Shell突破DMZ防火墙拿下域内成员机器将内网机器上线到CS使用Adfind侦察子域信息控制子域DCRadmin登录子域进行权限维持(白银票据/ACL)子域bloodhound获取父域信息分析子域Krbtgt密钥创建跨域金票Dcsync父域PTH父域DC准备打…

Activity启动模式

Activity的启动模式 首先activity启动之后是放在任务栈中的&#xff0c;task stack&#xff0c;既然是栈&#xff0c;遵循先进后出原则。有玩家比喻oncreate是入栈&#xff0c;onDestroy是出栈。 同一个APP中&#xff0c;不同的activity可以设置为不同的启动模式。在manifest…

【深一点学习】我用CPU也能跟着沐神实现单发多框检测(SSD),从底层了解目标检测任务的实现过程,需要什么样的方法调用。《动手学深度学习》Yes,沐神,Yes

目标检测近年来已经取得了很重要的进展&#xff0c;主流的算法主要分为两个类型[1611.06612] RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation (arxiv.org)&#xff1a;&#xff08;1&#xff09;two-stage方法&#xff0c;如R-CNN系算法…