react router实现
React Router 实现
React Router 是 React 应用中用于实现客户端路由的核心库,支持动态路由匹配、导航和组件渲染。以下是其核心实现方法和步骤。
安装 React Router
使用 npm 或 yarn 安装最新版本的 React Router(以 v6 为例):
npm install react-router-dom
基本路由配置
在根组件(如 App.js)中通过 BrowserRouter 包裹应用,并定义路由规则:
import { BrowserRouter, Routes, Route } from "react-router-dom";
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<HomePage />} />
<Route path="/about" element={<AboutPage />} />
</Routes>
</BrowserRouter>
);
}
BrowserRouter:基于 HTML5 History API 的路由容器。Routes和Route:定义路径与组件的映射关系。
动态路由与参数
通过 :param 语法实现动态路由,并在组件中通过 useParams 获取参数:
<Route path="/user/:id" element={<UserProfile />} />
// 在 UserProfile 组件中
import { useParams } from "react-router-dom";
function UserProfile() {
const { id } = useParams();
return <div>User ID: {id}</div>;
}
嵌套路由
通过 <Outlet> 实现嵌套路由的组件渲染:
<Route path="/dashboard" element={<DashboardLayout />}>
<Route path="stats" element={<StatsPage />} />
<Route path="settings" element={<SettingsPage />} />
</Route>
// DashboardLayout 组件中需包含 Outlet
function DashboardLayout() {
return (
<div>
<Sidebar />
<Outlet /> {/* 嵌套路由组件在此渲染 */}
</div>
);
}
导航与链接
使用 Link 或 useNavigate 实现导航:
import { Link, useNavigate } from "react-router-dom";
function NavBar() {
const navigate = useNavigate();
return (
<nav>
<Link to="/">Home</Link>
<button onClick={() => navigate("/about")}>About</button>
</nav>
);
}
Link:生成无刷新跳转的链接。useNavigate:编程式导航(如跳转、重定向)。
路由守卫与鉴权
通过自定义封装实现路由鉴权:
function PrivateRoute({ children }) {
const isAuthenticated = checkAuth(); // 自定义鉴权逻辑
return isAuthenticated ? children : <Navigate to="/login" />;
}
// 使用方式
<Route path="/admin" element={<PrivateRoute><AdminPage /></PrivateRoute>} />
404 路由处理
未匹配路径时渲染 404 页面:
<Route path="*" element={<NotFoundPage />} />
代码分割与懒加载
结合 React.lazy 和 Suspense 实现按需加载:
const AboutPage = React.lazy(() => import("./AboutPage"));
<Route
path="/about"
element={
<Suspense fallback={<LoadingSpinner />}>
<AboutPage />
</Suspense>
}
/>
注意事项
- 路由版本:React Router v6 与 v5 语法差异较大,需注意 API 变更。
- HashRouter:若需兼容无服务器配置的静态部署,可用
HashRouter替代BrowserRouter。 - 状态管理:导航时可通过
state传递数据:navigate("/user", { state: { fromHome: true } });







