路由:ReactRouter

概述

一个路径path对应一个组件component 当我们在浏览器中访问一个path的时候,path对应的组件会在页面中进行渲染。

使用

快速开始

安装依赖

npm i react-router-dom

基本使用

import { createBrowserRouter, RouterProvider } from 'react-router-dom'const router = createBrowserRouter([{path: "/",element: <App />,},{path: '/login',element: <div>登录页面</div>},{path: '/article',element: <div>文章页面</div>}
]);createRoot(document.getElementById('root')).render(<StrictMode><RouterProvider router={router} /></Provider></StrictMode>,
)

在这里插入图片描述
在这里插入图片描述
路由抽离

  • src目录下创建pages文件夹用来存放页面组件
  • src目录下创建router文件夹用来存放路由
  • main.ts 注入router实例

router.jsx

必须是.jsx不是.js.js里识别不了组件元素

import { createBrowserRouter } from "react-router-dom";
import App from "../App.jsx";
import Login from "../pages/login.jsx";
import Article from "../pages/article.jsx";const router = createBrowserRouter([{path: "/",element: <App />,},{path: "/login",element: <Login />,},{path: "/article",element: <Article />,},
]);export default router;

main.jsx

import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'import './index.css'
import store from './store'
import { Provider } from 'react-redux'
import { RouterProvider } from 'react-router-dom'
import router from './router/index'createRoot(document.getElementById('root')).render(<StrictMode><Provider store={store}><RouterProvider router={router} /></Provider></StrictMode>,
)

路由导航

路由系统中的多个路由之间需要进行路由跳转,并且在跳转的同时有可能需要传递参数进行通信

声明式导航
声明式导航是指在模板中通过<Link /> 组件描述出要跳转到哪里去。通过给组件的to属性指定要跳转到的路由path,组件会被渲染为浏览器支持的a链接,如果需要传参直接通过字符串拼接的方式拼接参数

import {Link} from "react-router-dom"
const Login = () => {return (<div>我是登录页面<Link to="/">返回首页</Link></div>)
}export default Login

在这里插入图片描述
编程式导航
编程式导航是指通过useNavigate钩子得到导航方法,然后通过调用方法以命令式的形式进行路由跳转,这种方式更加灵活

import { useNavigate } from "react-router-dom"
const Login = () => {const navigate = useNavigate()return (<div>我是登录页面<button onClick={() => { navigate('/') }}>返回首页</button></div>)
}export default Login

路由传参

searchParams传参

import { useNavigate } from "react-router-dom"
const Login = () => {const navigate = useNavigate()return (<div>我是登录页面<button onClick={() => { navigate('/article?id=123&name=tom') }}>打开文章</button></div>)
}export default Login
import { useSearchParams } from "react-router-dom"
const Article = () => {const [searchParams] = useSearchParams()const id = searchParams.get('id')return (<div>我是文章页面,id是:{id}</div>)
}export default Article

在这里插入图片描述
params传参

import { useNavigate } from "react-router-dom"
const Login = () => {const navigate = useNavigate()return (<div>我是登录页面<button onClick={() => { navigate('/article/123/tom') }}>打开文章</button></div>)
}export default Login
import { useParams } from "react-router-dom"
const Article = () => {const params = useParams()const id = params.idconst name = params.namereturn (<div>我是文章页面,id是:{id},name是:{name}</div>)
}export default Article
const router = createBrowserRouter([{path: "/",element: <App />,},{path: "/login",element: <Login />,},{path: "/article/:id/:name",element: <Article />,},
]);

这种方式必须要在路由中添加相应的占位符才可以进行匹配

嵌套路由

  • 使用children属性配置路由嵌套关系
  • 使用<Outlet />组件配置二级路由渲染位置
const router = createBrowserRouter([{path: "/",element: <App />,children: [{path: '/about',element: <About />}]},{path: "/login",element: <Login />,},{path: "/article/:id/:name",element: <Article />,},
]);
import { Outlet, Link } from 'react-router-dom'
import './App.css'
function App() {return (<div>主页<Link to="/about">关于</Link>{/* 二级路由出口 */}<Outlet /></div>);
}export default App

在这里插入图片描述
默认二级路由配置

当访问的是一级路由时,默认的二级路由组件可以得到渲染,只需要在二级路由的位置去掉path,设置index属性为true

const router = createBrowserRouter([{path: "/",element: <App />,children: [{index: true,element: <About />}]},{path: "/login",element: <Login />,},{path: "/article/:id/:name",element: <Article />,},
]);

404 路由

当浏览器输入url的路径在整个路由配置中都找不到对应的path,为了用户体验,可以使用404兜底组件进行渲染

const router = createBrowserRouter([{path: "*",element: <NotFound />}
]);

在这里插入图片描述

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

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

相关文章

《Linux从小白到高手》理论篇:一文概览常用Linux重要配置文件

List item 今天继续宅家&#xff0c;闲来无事接着写。本篇是《Linux从小白到高手》理论篇的最后一篇了。本篇集中介绍所有常用的Linux重要配置文件。 用这个命令可以查看配置文件所在的位置&#xff1a;如上图 locate "*.conf" "*.ini" "*.cfg&quo…

Meilisearch 和 Ollama 实现文本向量搜索

Meilisearch 是一个开源、快速、简洁的全文搜索引擎&#xff0c;专为构建高性能、实时的搜索功能而设计。其主要特点如下&#xff1a; 极速搜索&#xff1a;Meilisearch 使用反向索引来加速搜索查询&#xff0c;因此能够在海量数据中提供毫秒级的响应时间&#xff0c;尤其适合实…

springboot 整合 rabbitMQ(1)

目录 一、MQ概述 二、MQ的优势和劣势 三、常见的MQ产品 RabbitMQ使用步骤 第一步&#xff1a;确保rabbitmq启动并且可以访问15672 第二步&#xff1a;导入依赖 第三步&#xff1a;配置 auto自动确认 manual手工确认&#xff08;推荐使用&#xff01;可以防止消息丢失&a…

Chromium 中js navigator对象c++实现分析

一、Navigator 对象 Navigator 对象包含有关浏览器的信息。 前端测试例子&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>接口测试</title> </head> <body><div id"example&q…

布局性能优化

布局使用不当回导致卡顿、掉帧、响应慢等问题 一、布局流程 1、应用侧会根据前端UI描述创建后端的页面节点树&#xff0c;其中包含了处理UI组件属性更新、布局测算、事件处理等逻辑 2、页面节点树创建完成后&#xff0c;UI线程会对每个元素进行测算&#xff08;Measure&#…

STM32中断——外部中断

目录 一、概述 二、外部中断&#xff08;Extern Interrupt简称EXTI&#xff09; 三、实例-对射式红外传感器 1、配置中断&#xff1a; 2 、完整代码 一、概述 中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件(中断源)&#xff0c;使得CPU暂停当…

linux下创建软链接失败

最近在研究isce to stamps,在走流程的过程中,看了b站上Dr.Liu的视频和David Bakert的manual,按照manual进行了参数的设置,接着执行了make_single_reference_stack_isce命令,但是一直报错,发现这个报错还是国庆出去旅游的时候,想着在酒店把这个问题解决掉,但是每天早出晚…

20241005给荣品RD-RK3588-AHD开发板刷Rockchip原厂的Android12时使用iperf3测网速

20241005给荣品RD-RK3588-AHD开发板刷Rockchip原厂的Android12时使用iperf3测网速 2024/10/5 14:06 对于荣品RD-RK3588-AHD开发板&#xff0c;eth1位置上的PCIE转RJ458的以太网卡是默认好用的&#xff01; PCIE TO RJ45&#xff1a;RTL8111HS 被识别成为eth0了。inet addr:192.…

QT学习笔记1(QT和QT creator介绍)

QT学习笔记1&#xff08;QT和QT creator介绍&#xff09; Qt 是一个跨平台的应用开发框架&#xff0c;主要用于图形用户界面&#xff08;GUI&#xff09;应用的开发&#xff0c;但也支持非GUI程序的开发。Qt 支持多种平台&#xff0c;如Windows、macOS、Linux、iOS和Android&a…

【源码+文档+调试讲解】宜家宜业物业管理系统node.js框架

摘 要 近年来&#xff0c;科技飞速发展&#xff0c;在经济全球化的背景之下&#xff0c;互联网技术将进一步提高社会综合发展的效率和速度&#xff0c;互联网技术也会涉及到各个领域&#xff0c;而宜家宜业物业管理系统在网络背景下有着无法忽视的作用。信息管理系统的开发是…

浙江所有省级医院体检报告查询上线浙里办!

在医院完成体检后不知道什么时候出报告 体检报告出来后又要跑一次医院去拿报告 历年体检报告没保管好 往年体检报告找不到了 ………… ​编辑 为解决这些问题&#xff0c;浙江省卫生健康委结合“两卡融合、一网通办”工作的推进&#xff0c;不断丰富电子健康医保卡的功能&#…

JVS·智能BI数据可视化图表:普通列表与分组列表配置全解析

使用场景 在可视化配置中&#xff0c;很多场景中需要图形和详细信息的融合展示&#xff0c;那么在图表中可以新增普通列表与分组列表的配置。如下图所示&#xff1a; 配置说明 1、新增组件&#xff1a;配置入口如下图所示&#xff0c;新增组件时&#xff0c;选择普通列表与分…

用策略性文本序列影响大模型的输出

大型语言模型&#xff08;LLMs&#xff09;正越来越多地被集成到搜索引擎中&#xff0c;以提供针对用户查询的自然语言响应。用户也越来越依赖这些模型来做出快速而简便的购买决策。在本研究中&#xff0c;我们探讨了LLMs的推荐是否可以被操控以提升产品的可见性。 我们证明&a…

经纬恒润荣登2024北京民营企业科技创新百强榜单

9月底&#xff0c;北京市工商业联合会联合有关部门正式发布了2024年北京民营企业“14”百强榜单&#xff0c;经纬恒润凭借其在科技创新领域的卓越表现&#xff0c;再次荣获“北京民营企业科技创新百强”称号&#xff0c;彰显了公司在技术创新和研发实力方面的强劲竞争力。 此次…

《深度学习》循环神经网络RNN 结构及原理解析

目录 一、关于RNN 1、传统神经网络存在的问题 2、什么是循环神经网络 3、RNN特点 二、RNN基本结构 1、RNN基本结构 2、推导方式 注意&#xff1a; 3、循环的由来 4、RNN的局限性 一、关于RNN 1、传统神经网络存在的问题 无法训练出具有顺序的数据&#xff0c;模型搭…

手机使用技巧:8 个 Android 锁屏移除工具 [解锁 Android]

有时候&#xff0c;您会被锁定在自己的 Android 设备之外&#xff0c;而且似乎不可能重新进入。 一个例子就是你买了一部二手手机&#xff0c;后来发现无法使用。另一种情况是你忘记了屏幕锁定密码和用于验证密码的 Google 帐户凭据。这种情况很少见&#xff0c;但确实会发生&…

A股牛市来袭,资本涌动:加密市场的出路与机遇

近期&#xff0c;随着A股的强劲反弹&#xff0c;不少加密市场的投资者&#xff0c;尤其是一些KOL&#xff08;关键意见领袖&#xff09;&#xff0c;开始转移资金并公开建议进军A股。这种趋势反映出部分投资者对加密市场的信心动摇&#xff0c;尤其是在全球宏观经济不确定性加剧…

Qt应用程序logo那些事儿

前言 软件的logo一般跟公司的版权、商标、创意、设计密切相关&#xff0c;一般软件在开发之初都会特意设计好&#xff0c;以提高应用软件的辨识度 1 安装包logo EXE压缩包的logo&#xff0c;可以在Inno Setup Compiler的脚本里边设定&#xff0c;这个可以参考文章 2 可执行…

PyTorch单机多卡训练(无废话)

目前大家基本都在使用DistributedDataParallel&#xff08;简称DDP&#xff09;用来训练&#xff0c;该方法主要用于分布式训练&#xff0c;但也可以用在单机多卡。 第一步&#xff1a;初始化分布式环境&#xff0c;主要用来帮助进程间通信 torch.distributed.init_process_g…

深圳市步步精科技有限公司荣获发明专利,彰显技术研发实力

2024年8月13日&#xff0c;深圳市步步精科技有限公司&#xff08;BBJconn&#xff09;正式获得了其新开发的防水连接器专利&#xff0c;授权公告号为CN 118352837 B。这项技术的突破标志着公司在连接器领域的持续创新&#xff0c;进一步巩固了其行业领先地位。 专利技术概述 此…