六十天前端强化训练之第二十天React Router 基础详解

ops/2025/3/16 17:19:31/

=====欢迎来到编程星辰海的博客讲解======

看完可以给一个免费的三连吗,谢谢大佬!

目录

一、核心概念

1.1 核心组件

1.2 路由模式对比

二、核心代码示例

2.1 基础路由配置

2.2 动态路由示例

2.3 嵌套路由实现

2.4 完整示例代码

三、关键功能实现效果

四、学习要点总结

4.1 核心概念

4.2 最佳实践

4.3 常见问题

五、扩展阅读推荐

5.1 官方资源

5.2 优质文章

5.3 视频教程

六、实践案例:电商网站路由设计


一、核心概念

React Router 是 React 生态中最流行的路由解决方案,提供声明式的路由配置和导航功能,包含三个核心包:

  1. react-router:路由核心库
  2. react-router-dom:Web 专用路由库
  3. react-router-native:React Native 专用路由

1.1 核心组件

组件作用描述重要属性
<BrowserRouter>HTML5 history 模式路由容器basename
<Routes>路由匹配容器组件-
<Route>定义路由映射规则path, element
<Link>声明式导航组件to, state
<NavLink>带激活状态的 LinkclassName, style
<Navigate>编程式导航组件to, replace
<Outlet>嵌套路由占位符-

1.2 路由模式对比

JAVASCRIPT

// 1. BrowserRouter(推荐)
https://example.com/about// 2. HashRouter(兼容旧浏览器)
https://example.com/#/about

二、核心代码示例

2.1 基础路由配置

JSX

// App.js
import { BrowserRouter,Routes,Route,Link,Outlet
} from 'react-router-dom';// 页面组件
function Home() { return <h2>首页</h2> }
function About() { return <h2>关于我们</h2> }function App() {return (<BrowserRouter><nav><Link to="/">首页</Link><Link to="/about">关于</Link></nav><Routes><Route path="/" element={<Home />} /><Route path="/about" element={<About />} /></Routes></BrowserRouter>);
}

2.2 动态路由示例

JSX

// 产品详情页
function ProductDetail() {const { id } = useParams();return <h2>产品ID: {id}</h2>;
}// 路由配置
<Routes><Route path="/products/:id" element={<ProductDetail />} />
</Routes>

2.3 嵌套路由实现

JSX

// 用户模块布局
function UserLayout() {return (<div><h3>用户中心</h3><Outlet />  {/* 子路由渲染位置 */}</div>);
}// 路由配置
<Route path="/user" element={<UserLayout />}><Route index element={<Dashboard />} /><Route path="profile" element={<Profile />} /><Route path="orders" element={<OrderList />} />
</Route>

2.4 完整示例代码

JSX

import React from 'react';
import {BrowserRouter,Routes,Route,Link,useParams,Navigate
} from 'react-router-dom';// 页面组件
function Home() { return <h2>首页</h2> }
function About() { return <h2>关于我们</h2> }
function ProductList() {return (<div><h2>产品列表</h2><ul>{[1,2,3].map(id => (<li key={id}><Link to={`/products/${id}`}>产品{id}</Link></li>))}</ul></div>);
}
function ProductDetail() {const { id } = useParams();return <h2>产品详情:{id}</h2>;
}
function NotFound() { return <h2>404 页面不存在</h2> }function App() {return (<BrowserRouter><nav style={{ padding: 20, background: '#eee' }}><Link to="/" style={{ marginRight: 20 }}>首页</Link><Link to="/about" style={{ marginRight: 20 }}>关于</Link><Link to="/products">产品中心</Link></nav><Routes><Route path="/" element={<Home />} /><Route path="/about" element={<About />} /><Route path="/products" element={<ProductList />} /><Route path="/products/:id" element={<ProductDetail />} /><Route path="/old-about" element={<Navigate to="/about" replace />} /><Route path="*" element={<NotFound />} /></Routes></BrowserRouter>);
}export default App;

三、关键功能实现效果

这里我还存在问题,先给大家放大概图看看,到时候我还要再试试

[首页] [关于] [产品] [用户中心] [错误链接]
🏠 首页
欢迎来到网站主页
OR
📦 产品列表
• 产品 A
• 产品 B
• 产品 C
OR
👤 用户中心
[仪表盘] [个人资料]
📊 用户仪表盘
OR
⛔ 404 页面未找到
请检查您访问的URL是否正确
  1. 基础导航切换
  2. 动态路由参数展示
  3. 嵌套路由层级显示
  4. 编程式导航跳转
  5. 404页面处理

四、学习要点总结

4.1 核心概念

  1. 路由配置必须包裹在<BrowserRouter>
  2. <Routes>自动选择最佳匹配路由
  3. element属性接收React组件(v6新特性)
  4. 动态参数使用:paramName语法
  5. 索引路由使用index属性标记

4.2 最佳实践

  1. 使用<Link>代替<a>标签避免页面刷新
  2. 嵌套路由配合<Outlet>实现布局复用
  3. useNavigate实现编程式导航
  4. useLocation获取路由状态信息
  5. loaderaction处理数据加载(v6.4+)

4.3 常见问题

JAVASCRIPT

// 错误:直接使用<a>标签
<a href="/about">关于</a> ❌// 正确:使用Link组件
<Link to="/about">关于</Link> ✅// 路由匹配优先级问题
<Route path="users/:id" />
<Route path="users/new" /> ❌ 顺序错误// 正确顺序
<Route path="users/new" />
<Route path="users/:id" /> ✅

五、扩展阅读推荐

5.1 官方资源

  1. React Router 官方文档
  2. GitHub 仓库
  3. 官方示例集合

5.2 优质文章

  1. React Router v6 完全指南
  2. 深度解析路由鉴权方案
  3. 路由懒加载最佳实践

5.3 视频教程

  1. React Router v6 官方教学视频
  2. 全栈路由配置指南
  3. 实战电商网站路由设计

六、实践案例:电商网站路由设计

JSX

// routes.js
const routes = [{path: '/',element: <MainLayout />,children: [{ index: true, element: <HomePage /> },{ path: 'products', element: <ProductListPage /> },{ path: 'products/:slug', element: <ProductDetailPage /> },{ path: 'cart', element: <CartPage /> },{ path: 'dashboard',element: <RequireAuth><DashboardLayout /></RequireAuth>,children: [{ index: true, element: <OrderHistory /> },{ path: 'settings', element: <AccountSettings /> }]},{ path: '*', element: <NotFoundPage /> }]}
];// 路由守卫组件
function RequireAuth({ children }) {const auth = useAuth();const location = useLocation();if (!auth.user) {return <Navigate to="/login" state={{ from: location }} replace />;}return children;
}

通过本教程,大家可以掌握React Router的核心用法,建议结合官方文档和实际项目进行实践练习。路由配置需特别注意组件层级和匹配顺序,动态路由参数处理要考虑边界情况,嵌套路由是实现复杂布局的利器。


http://www.ppmy.cn/ops/166256.html

相关文章

从0到1入门Docker

一、快速入门 Docker run命令中的常见参数 -d&#xff1a;让容器后台运行--name&#xff1a;给容器命名&#xff08;唯一&#xff09;-e&#xff1a;环境变量-p&#xff1a;宿主机端口映射到容器内端口镜像名称结构&#xff1a;Repository &#xff1a;TAG&#xff08;镜像名&…

【eNSP实战】配置端口映射(NAT Server)

拓图 要求&#xff1a; 将AR1上的GE 0/0/1接口的地址从TCP协议的80端口映射到内网 Web服务器80端口 AR1接口配置 interface GigabitEthernet0/0/0ip address 192.168.0.1 255.255.255.0 # interface GigabitEthernet0/0/1ip address 11.0.1.1 255.255.255.0 # ip route-s…

设计模式-观察者模式、状态模式

目录 观察者模式 定义 类图 角色 优缺点 使用场景 状态模式 定义 类图 角色 优缺点 使用场景 观察者模式 定义 定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新 又被称为发布-订阅…

DC-6靶机详解

一、主机发现 arp-scan -l靶机ip为192.168.55.159 二、端口扫描、目录枚举、指纹识别、 2.1端口扫描 nmap 192.168.55.159发现没有开放特殊端口 看来信息收集的重点要放在网页中了 2.2目录枚举 dirb http://192.168.55.1592.3指纹识别 nmap 192.168.55.159 -sV -sC -O …

【PyCharm2024】一些好用的小功能

目录 一、全局查找及替换关键字 方法一&#xff1a; 方法二&#xff1a; 二、调整字体大小 三、调整Terminal的字体大小 四、改变行注释的斜体以及颜色 一、全局查找及替换关键字 编写程序时&#xff0c;通常想要在所有文件中查找或者替换某个词。 方法一&#xff1a; …

【linux驱动开发】创建proc文件系统中的目录和文件实现

1. proc_mkdir_data 说明&#xff1a; 用于在 /proc 文件系统中创建一个目录 函数原型&#xff1a; struct proc_dir_entry *proc_mkdir_data(const char *name, umode_t mode, struct proc_dir_entry *parent, void *data); 参数&#xff1a; const char *name: 要创建的目录…

C 语言进【进阶篇】之动态内存管理:从底层机制到实战优化

目录 &#x1f680;前言&#x1f31f;动态内存分配的必要性&#x1f914;动态内存分配函数深度剖析&#x1f4af;malloc函数&#xff1a;内存申请的主力军&#x1f4af;free函数&#xff1a;释放内存的“清道夫”&#x1f4af;calloc函数&#xff1a;初始化内存的利器&#x1f…

Ceph(1):分布式存储技术简介

1 分布式存储技术简介 1.1 分布式存储系统的特性 &#xff08;1&#xff09;可扩展 分布式存储系统可以扩展到几百台甚至几千台的集群规模&#xff0c;而且随着集群规模的增长&#xff0c;系统整体性能表现为线性增长。分布式存储的水平扩展有以下几个特性&#xff1a; 节点…