路由基础概念
什么是前端路由?
- 核心作用:管理单页面应用的页面切换
- 主要功能:
根据URL显示对应组件
保持浏览器历史记录
实现页面间导航不刷新
React Router
包含三个主要包:
react-router
:核心逻辑react-router-dom
:Web应用扩展react-router-native
:React Native专用
学习前置条件
必要基础知识
- HTML基础:理解标签结构
- JavaScript ES6:
- 箭头函数
- 模块化导入导出(import/export)
- React基础:
- 组件概念
- JSX语法
- Props传递
学习步骤
- 创建基础React项目
- 安装配置React Router
- 实现简单页面切换
- 处理动态路由参数
- 实现嵌套路由布局
- 添加权限控制
快速上手
安装依赖
# 使用npm
npm install react-router-dom
# 使用yarn
yarn add react-router-dom
基础路由配置
// main.jsx
import React from 'react';
import ReactDOM from 'react-dom/client';
import { BrowserRouter } from 'react-router-dom';
import App from './App';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<BrowserRouter>
<App />
</BrowserRouter>
);
定义路由结构
// App.jsx
import { Routes, Route } from 'react-router-dom';
function App() {
return (
<Routes>
<Route path="/" element={<HomePage />} />
<Route path="/products" element={<ProductList />} />
<Route path="/about" element={<AboutPage />} />
<Route path="*" element={<NotFound />} />
</Routes>
);
}
核心功能实现
页面导航
// 使用Link组件
import { Link } from 'react-router-dom';
function Navigation() {
return (
<nav>
<Link to="/">首页</Link>
<Link to="/products">老大点我</Link>
</nav>
);
}
动态路由参数
// 定义动态路由
<Route path="/names/:Lhuu" element={<NameDetail />} />
// 获取参数
import { useParams } from 'react-router-dom';
function NameDetail() {
const { Lhuu } = useParams();
return <div>来财羊大王: {Lhuu}</div>;
}
嵌套路由
// 父级路由
<Route path="/user" element={<UserLayout />}>
<Route index element={<Profile />} />
<Route path="settings" element={<Settings />} />
</Route>
// 子路由容器
import { Outlet } from 'react-router-dom';
function UserLayout() {
return (
<div>
<header>个人站点</header>
<Outlet /> {/* 子路由显示位置 */}
<footer>我的信息</footer>
</div>
);
}
常见功能扩展
路由权限控制
function PrivateRoute({ children }) {
const isLoggedIn = checkLoginStatus(); // 你的验证逻辑
return isLoggedIn ? children : <Navigate to="/login" />;
}
// 使用示例
<Route
path="/dashboard"
element={
<PrivateRoute>
<Dashboard />
</PrivateRoute>
}
/>
404页面处理
<Route
path="*"
element={
<div className="not-found">
<h1>404 - 页面不存在</h1>
<Link to="/">返回首页</Link>
</div>
}
/>
最佳实践建议
- 路由分层管理:将路由配置抽离到单独文件
- 代码分割:使用
React.lazy
实现按需加载 - 路径常量:统一管理路由路径字符串
- 版本控制:锁定React Router版本
- 错误边界:配合错误边界组件处理异常
学习资源
- 官方文档
- React Router v6示例项目
- 路由调试工具:React Developer Tools
实际开发中建议结合TypeScript使用,获得更好的类型提示