当前位置: 首页 > news >正文

03-状态管理与路由——05-React Router 基础配置

React Router 基础配置

一、React Router 简介

React Router 是 React 应用的标准路由库。

安装

npminstallreact-router-dom

二、基础配置

2.1 创建路由

// App.js import { BrowserRouter, Routes, Route, Link } from 'react-router-dom'; import Home from './pages/Home'; import About from './pages/About'; import Contact from './pages/Contact'; function App() { return ( <BrowserRouter> <nav> <Link to="/">首页</Link> <Link to="/about">关于</Link> <Link to="/contact">联系</Link> </nav> <Routes> <Route path="/" element={<Home />} /> <Route path="/about" element={<About />} /> <Route path="/contact" element={<Contact />} /> </Routes> </BrowserRouter> ); }

2.2 使用 NavLink(带激活样式)

import { NavLink } from 'react-router-dom'; function Navigation() { return ( <nav> <NavLink to="/" className={({ isActive }) => isActive ? 'active' : ''} > 首页 </NavLink> <NavLink to="/about" style={({ isActive }) => ({ color: isActive ? 'red' : 'black', fontWeight: isActive ? 'bold' : 'normal' })} > 关于 </NavLink> <NavLink to="/contact">联系</NavLink> </nav> ); }

三、编程式导航

import { useNavigate } from 'react-router-dom'; function LoginButton() { const navigate = useNavigate(); const handleLogin = () => { // 登录逻辑 navigate('/dashboard'); }; const goBack = () => { navigate(-1); // 返回上一页 }; const goForward = () => { navigate(1); // 前进一页 }; const replacePage = () => { navigate('/login', { replace: true }); // 替换历史记录 }; return ( <div> <button onClick={handleLogin}>登录</button> <button onClick={goBack}>返回</button> <button onClick={goForward}>前进</button> </div> ); }

四、404 页面

function App() { return ( <BrowserRouter> <Routes> <Route path="/" element={<Home />} /> <Route path="/about" element={<About />} /> <Route path="/contact" element={<Contact />} /> <Route path="*" element={<NotFound />} /> </Routes> </BrowserRouter> ); } function NotFound() { const navigate = useNavigate(); return ( <div> <h1>404 - 页面未找到</h1> <button onClick={() => navigate('/')}>返回首页</button> </div> ); }

五、重定向

import { Navigate } from 'react-router-dom'; function App() { const isLoggedIn = false; return ( <BrowserRouter> <Routes> <Route path="/" element={<Home />} /> <Route path="/dashboard" element={isLoggedIn ? <Dashboard /> : <Navigate to="/login" />} /> <Route path="/login" element={<Login />} /> </Routes> </BrowserRouter> ); }

六、HashRouter vs BrowserRouter

类型URL 示例适用场景
BrowserRouterexample.com/about需要服务器配置
HashRouterexample.com/#/about静态托管、GitHub Pages
// HashRouter 使用 import { HashRouter } from 'react-router-dom'; function App() { return ( <HashRouter> {/* 路由配置 */} </HashRouter> ); } // URL 会变成 example.com/#/about

七、获取当前位置信息

import { useLocation } from 'react-router-dom'; function Breadcrumb() { const location = useLocation(); return ( <div> 当前位置: {location.pathname} 搜索参数: {location.search} 哈希: {location.hash} 状态: {JSON.stringify(location.state)} </div> ); }

http://www.jsqmd.com/news/985657/

相关文章:

  • 别再只背公式了!用‘小学生也能懂’的比喻,彻底搞懂RSA低加密指数攻击为什么危险
  • 从热水器到充电桩:手把手教你根据电器功率算清空开型号(C32/C40/Dxx详解)
  • 告别臃肿!VS2022只装C++桌面开发,如何精准搭配Qt 5.12打造轻量级GUI编程环境
  • 这款测试用例生成神器让你的效率提升 10 倍
  • Rimworld Mod制作避坑指南:从ThingDef命名到XML结构,新手必看的Defs文件核心要点
  • 2026 成都防水补漏哪家好?本地防水企业排行榜,阳台、地下室漏水、瓷砖空鼓一站式维修 - 泛家庭维修
  • 从唐诗到商品推荐:我用Neo4j Desktop给电商数据做了个“知识图谱”实验
  • 数据契约驱动的机器学习Pipeline:重构数据科学家与工程师的协作范式
  • 基于深度学习YOLOv11的家具识别检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)
  • 209页PPT实战,华为市场营销MR+LTC流程规划:从市场洞察到现金回笼的一体化作战体系
  • 郑州卡地亚+GP芝柏表手表专业回收,26年精选回收店铺排行榜推荐 - 莘州文化
  • Redis 6.0多线程和7.0 Functions深度解析:你的缓存架构该升级了吗?
  • 告别Apex!用PyTorch Lightning轻松搞定半精度训练与多卡同步(保姆级避坑指南)
  • 鸿蒙开发实战:金额大写转换工具
  • 别再求人了!手把手教你用CMW500和QRCT搞定WiFi定频测试(高通平台保姆级教程)
  • 2026年6月丰宁坝上草原住宿民宿甄选指南:短途自驾、朋友聚会、观景食宿一站式参考 - 海棠依旧大
  • 别再死记硬背RSA公式了!通过BUUCTF RSAROLL实战理解加密、解密与‘滚动’拼接
  • 深入S32K Bootloader的Flash操作:为什么你的CAN升级程序会写砖?避坑指南来了
  • 摸鱼神器,这班现在爽了!
  • 告别FTP客户端!用PowerShell的PSFTP模块实现自动化文件传输(含Azure部署实战)
  • STM32F105到GD32F305的CAN驱动移植实战:我踩过的五个坑与填坑指南
  • 避开这5个坑,你的2D视觉机器人手眼标定精度能翻倍 | 基于棋盘格的实战经验分享
  • 保姆级教程:用MounRiver Studio和WCH-Link点亮你的第一个CH32V103C开发板
  • 模板驱动型文档自动化:结构化填充与多源数据对接实战
  • Elsevier投稿别再踩坑了!手把手教你搞定Knowledge-Based Systems的LaTeX文件上传与PDF生成
  • Mythos模型:面向世界建模的AI叙事引擎与闸门式部署实践
  • 三明百达翡丽+宝珀手表专业回收,26年精选回收店铺排行榜推荐 - 莘州文化
  • 不写代码也能玩转智能家居:用Google App Inventor为你的ESP8266+Alexa项目做个专属控制App
  • 告别IP依赖:在Vivado中直接手写MMCME2_ADV原语生成多路时钟(附参数计算避坑指南)
  • 建立“低语境、重事实、无废话”的英语语感