React路由使用入门react-router-dom

news2025/1/17 13:56:57

1.安装react-router-dom

npm i react-router-dom 

2.配置

(1)创建router实例对象并且配置路由对应关系

(2)路由绑定

import {createBrowserRouter,RouterProvider} from 'react-router-dom'

//(1)创建router实例对象并且配置路由对应关系
const router = createBrowserRouter([
  {
    path : '/login',
    element:<div>我是登录页面</div>
  },
  {
    path : '/article',
    element:<div>我是文章页面</div>
    },
])

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    {/* 路由绑定 */}
    <RouterProvider router={router}>

    </RouterProvider>
  </React.StrictMode>
);

二、路由模块封装

1.创建page文件夹

2.创建router文件夹

import Login from "../page/Login";
import Article from "../page/Article";

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

const router = createBrowserRouter([
    {
        path : '/login',
        element : <Login></Login>
    },
    {
        path : '/article',
        element : <Article></Article>
    }
])

export default router

3.应用入口文件渲染

import {createBrowserRouter,RouterProvider} from 'react-router-dom'

import router from './router';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    
    <RouterProvider router={router}>

    </RouterProvider>
  </React.StrictMode>
);

三、路由导航

1.声明式导航

说明:声明式导航是指在模板中通过<Link/>组件描述要跳转到哪里

语法:<Link to=''/article''>跳转</Link>

使用场景:菜单

import { Link } from "react-router-dom"

const Login = ()=>{
    return <>
        <div>
            Login页面
            <Link to="/article">跳转文章</Link>
        </div>
    
    </>
}
export default Login

2.编程式导航

说明:编程式导航是指通过‘useNavigate’钩子得到导航方法,然后通过调用方法以命令的形式进行路由跳转

语法:const navigate=uaeNavigate() navigate('/article')

使用场景:登录后跳转

import { Link,useNavigate } from "react-router-dom"
const Login = ()=>{
    const navigate = useNavigate()
    return <>
        <div>
            <button onClick={()=>navigate('/article')}>命令式跳转2</button>
        </div>
    </>
}
export default Login

四、导航传参

1.searchParams传参

        <div>
        
            <button onClick={()=>navigate('/article?id=1001&name=jack哈啊哈')}>传参</button>
        </div>  

//传参方:?分割参数 参数用&连接多个参数

import { useSearchParams } from "react-router-dom"
const Article = ()=>{
   const [params] = useSearchParams()
   const id= params.get('id')
   const name= params.get('name')
    return <>
        <div>

            {id} + {name}
        </div>
    </>
}
export default Article

2.params传参

const router = createBrowserRouter([
    {
        path : '/login',
        element : <Login></Login>
    },
    {
        path : '/article/:id/:name', //添加参数占位符
        element : <Article></Article>
    }
])
 <button onClick={()=>navigate('/article/1001/jack')}>params传参</button> //直接/+参数值
import { useParams, useSearchParams } from "react-router-dom"

const Article = ()=>{

    const params = useParams()
    const id = params.id
    const name = params.name

    return <>
        <div>

            {id} + {name}
        </div>
    
    </>
}

 

五、嵌套式路由

1.实现步骤

(1)使用children属性配置路由嵌套关系

const router = createBrowserRouter([
    {
        path : '/',
        element : <Layout></Layout>,
        children :[{
            path : '/board',
            element : <Board></Board>
        },
        {
            path : '/about',
            element : <About></About>
        }]
    },
    {
        path : '/login',
        element : <Login></Login>
    },
    {
        path : '/article/:id/:name',
        element : <Article></Article>
    }
])

(2)使用<Outlet/>组件配置二级路由渲染位置

import { Link,Outlet } from "react-router-dom"

const Layout= ()=>{
    return <>
        <div>
            我是一级组件Layout
        </div>
        <div>

            <Link to='/board'> 面板</Link>
            <Link to='/about'> 关于</Link>
        </div>
        {/* 配置二级路由的出口 */}
    
        <Outlet></Outlet>
    </>
}

export default Layout

2.默认二级路由

{
        path : '/',
        element : <Layout></Layout>,
        children :[{
            index:true, //1.加index:true
            element : <Board></Board>
        },
        {
            path : '/about',
            element : <About></About>
        }]
    },
const Layout= ()=>{
    return <>
        <div>
            我是一级组件Layout
        </div>
        <div>
            <Link to='/'> 面板</Link> //2.路径修改/
            <Link to='/about'> 关于</Link>
        </div>
        {/* 配置二级路由的出口 */}
    
        <Outlet></Outlet>
    </>
}

六、404路由配置

说明:当浏览器输入url路径在整个路由配置中都找不到对应的path,为了用户体验,展示404进行渲染

const router = createBrowserRouter([
    {
        path : '/',
        element : <Layout></Layout>,
        children :[{
            index:true,
            element : <Board></Board>
        },
        {
            path : '/about',
            element : <About></About>
        }]
    },
    {
        path : '*',
        element: <NotFound></NotFound>
    } //添加NotFound组件 使用*配置
])

七、路由模式

1.hash :由react-dom中 createHashRouter创建(底层:监听hashChange事件)

2.history:使用react-dom中 createBrowerRouter创建(底层:history对象+pushState事件)需要后端支持

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

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

相关文章

web复习(二)

编程题 1.编写一个函数&#xff0c;接收一个数组作为参数&#xff0c;返回一个对象&#xff0c;其中包含数组中每个元素及其出现次数。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewpo…

【CANoe示例分析】Basic UDP Multicast(CAPL)

1、工程路径 C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 16.6.2\Ethernet\Simulation\UDPBasicCAPLMulticast 在CANoe软件上也可以打开此工程:File|Sample Configurations|Ethernet - Simulation of Ethernet ECUs|Basic UDP Multicast(CAPL) 2、示例目…

在Linux(ubuntu22.04)搭建rust开发环境

1.安装rust 1.安装curl: sudo apt install curl 2.安装rust最新版 curl --proto ‘https’ --tlsv1.2 https://sh.rustup.rs -sSf | sh 安装完成后出现&#xff1a;Rust is installed now. Great! 重启当前shell即可 3.检验是否安装成功 rustc --version 结果出现&…

react跳转传参的方法

传参 首先下载命令行 npm react-router-dom 然后引入此代码 前面跳转的是页面 后面传的是你需要传的参数接参 引入此方法 useLocation()&#xff1a;这是 react-router-dom 提供的一个钩子&#xff0c;用于获取当前路由的位置对象location.state&#xff1a;这是从其他页面传…

路径规划之启发式算法之九:灰狼优化算法(Grey Wolf Optimizer,GWO)

灰狼优化算法&#xff08;Grey Wolf Optimizer&#xff0c;GWO&#xff09;是一种智能优化算法&#xff0c;由澳大利亚格里菲斯大学学者Mirjalili等人在2014年提出。该算法灵感来源于灰狼群体的捕食行为&#xff0c;通过模拟灰狼的社会等级分层和狩猎机制来解决复杂的优化问题。…

数字乡村建设方案-6

1. 方案背景与目标 数字乡村建设旨在响应乡村振兴战略&#xff0c;解决顶层设计缺失、资源统筹不足、基础设施缺失等问题&#xff0c;通过信息化建设加强党的领导&#xff0c;提升乡村治理水平&#xff0c;促进乡村经济发展。 2. 乡村信息化需求 乡村管理人员希望通过信息化…

数据分析: 基于CSDN博客排行榜TOP100的博客创作分析和建议

在CSDN上写一些学习心得&#xff0c;分享一些经验&#xff0c;是一件令人愉悦的事情。但是绝大多数人&#xff0c;很多时候写的东西没人看&#xff0c;浏览量个位数&#xff0c;点赞收藏都是0&#xff0c;这着实让人觉得沮丧和无聊&#xff0c;最终选择放弃。 今天&#xff0c…

快速幂+逆元求组合数

在计算组合数 时&#xff0c;直接暴力计算既慢又容易溢出。今天我们来揭开 快速幂 和 模逆元 的神秘面纱&#xff0c;带你一边学习理论&#xff0c;一边轻松解决实际问题&#xff01; 什么是快速幂&#xff1f; 快速幂是一种高效计算 的方法。它利用指数的二进制表示&#x…

「OC」多线程(三)——NSOperation

「OC」多线程(三)——NSOperation 文章目录 「OC」多线程(三)——NSOperation前言介绍实现的具体步骤 NSOperation的创建NSOperationQueue的使用使用实例NSInvocationOperation的使用NSBlockOperation的使用NSOperationQueue的使用取消操作最大并发数 自定义NSOperation子类相关…

可供参考的GitHub国内镜像

在配置了本地hosts文件和魔法后仍存在无法访问的问题 针对如上问题&#xff0c;可以使用国内的镜像地址做替换 例如: https://github.com/bubbliiiing/detr-pytorch改成 https://hub.nuaa.cf/bubbliiiing/detr-pytorch推荐使用的镜像 https://hub.yzuu.cf/ https://hub.nua…

Codeforces Round 784 (Div. 4)

题目链接 A. Division? 题意 思路 模拟即可 示例代码 void solve() {int n;cin >> n;int ans;if(n > 1900) ans 1;else if(n > 1600) ans 2;else if(n > 1400) ans 3;else ans 4;cout << "Division " << ans << \n;}B. T…

E172 ASP.NET+SQL+C#+LW+图书管理系统的设计与实现 配置 源码 文档 全套资料

图书管理系统 1.项目摘要2. 系统的概述3.项目功能4.界面展示5.源码获取 1.项目摘要 摘 要 书籍是供人们获取并增长知识的主要途径&#xff0c;由于图书的种类较多&#xff0c;阅读者也较多&#xff0c;借阅量较大&#xff0c;且易出错&#xff0c;传统的图书借阅若还停留在手工…

TriCore架构-TC397将code从原来在P-Cache地址移到PSPR的地址,CPU的负载率为什么没影响

TC397有6个内核,每个核有自己的私有的Memory以及共有的Memory。 私有的:PSPR,DSPR,P-Cache,D-Cache,PF(X),LMU,DLMU,LPB PSPR主要用来运行RAM Code,比如说有些代码要放到RAM里面运行。 DSPR主要当成SRAM来用,比如用来存放全局变量。 P-Cache通过PFI接口访问DMU的3M内…

109.【C语言】数据结构之二叉树层序遍历

目录 1.知识回顾 2.代码实现 准备工作 LevelOrder函数 代码框架 关键代码 3.执行结果 1.知识回顾 层序遍历参见106.【C语言】数据结构之二叉树的三种递归遍历方式文章 截取的部分内容 定义:按层的方式遍历(,设n为树的深度,h1-->h2-->h3-->...-->hn) 以下面…

基于SpringBoot的养老院管理系统的设计与实现

一、前言 随着人口老龄化的加剧&#xff0c;养老院作为老年人养老的重要场所&#xff0c;其管理的高效性和科学性显得尤为重要。传统的养老院管理方式多依赖人工操作&#xff0c;存在信息记录不及时、不准确&#xff0c;管理流程繁琐&#xff0c;资源调配困难等问题。利用信息技…

012 路由信息协议RIP

路由信息协议RIP 作为度量(Metric)来衡量到达目的网络的距离 RIP是一种基于距离矢量D-V(Distance-Vector)算法的协议&#xff0c;它使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离。 默认情况下&#xff0c;路由器到与它直接相连网络的跳数为0&#xff0c;因此…

NLP与LLM的工程化实践与学习思考 - 说说知识图谱

NLP与LLM的工程化实践与学习思考[24年半年工作总结] - 说说知识图谱 0 真的就是先说说1 为什么知识图谱什么是知识图谱&#xff1f;基于图的数据结构&#xff1f;基于数据结构的图&#xff1f;知识图谱的技术要点两个技术维度&#xff1a;知识、图七个技术要点&#xff1a;表示…

ROS2 - C++工程创建和工程解析

ROS2 系列文章目录 文章目录 ROS2 系列文章目录前言1. 安装构建工具colcon1.1 简介1.2 安装colcon 2. 创建工作空间2.1 创建一个工作目录 3 创建一个C软件包4. 编写发布者节点4.1 使用wget获取一个模板4.2 代码解读4.2 添加依赖项4.3 修改CmakeLists.txt 5. 编写订阅者节点5.1 …

【5G】架构 Architecture

5G网络架构受到了多个因素的影响。首先是为云端实现做好准备&#xff0c;其次是应对比之前更大的数据速率和更低的时延&#xff0c;启用新服务的能力&#xff0c;以及特别是在初期阶段与长期演进&#xff08;LTE&#xff09;的互操作需求。所有这些因素都对5G架构产生了影响。除…

vue2+html2canvas+js PDF实现试卷导出和打印功能

1.首先安装 import html2canvas from html2canvas; import { jsPDF } from jspdf; 2.引入打印插件print.js import Print from "/assets/js/print"; Vue.use(Print) // 打印类属性、方法定义 /* eslint-disable */ const Print function (dom, options) {if (…