react router如何使用
安装 React Router
确保项目已安装 React 和 React DOM。通过 npm 或 yarn 安装 React Router 的最新版本:
npm install react-router-dom
或
yarn add react-router-dom
基本路由配置
在入口文件(如 App.js)中导入必要的组件并配置路由:
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
function App() {
return (
<Router>
<Routes>
<Route path="/" element={<HomePage />} />
<Route path="/about" element={<AboutPage />} />
</Routes>
</Router>
);
}
Router包裹整个应用,提供路由上下文。Routes定义路由匹配规则。Route指定路径与渲染组件的映射关系。
导航链接
使用 Link 或 NavLink 组件实现页面间跳转:

import { Link, NavLink } from 'react-router-dom';
function NavBar() {
return (
<nav>
<Link to="/">Home</Link>
<NavLink to="/about" activeClassName="active">About</NavLink>
</nav>
);
}
Link生成无样式的导航链接。NavLink支持高亮当前激活路由(通过activeClassName或style属性)。
动态路由与参数
通过 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>;
}
编程式导航
使用 useNavigate 钩子实现代码跳转:
import { useNavigate } from 'react-router-dom';
function LoginButton() {
const navigate = useNavigate();
return (
<button onClick={() => navigate('/dashboard')}>
Login
</button>
);
}
嵌套路由
通过嵌套 Route 组件实现层级路由:

<Route path="/dashboard" element={<Dashboard />}>
<Route path="settings" element={<Settings />} />
<Route path="profile" element={<Profile />} />
</Route>
在父组件中使用 <Outlet /> 渲染子路由:
function Dashboard() {
return (
<div>
<h1>Dashboard</h1>
<Outlet /> {/* 子路由在此渲染 */}
</div>
);
}
重定向与 404 处理
使用 Navigate 组件或通配符路由处理重定向和未匹配路径:
<Route path="/old" element={<Navigate to="/new" replace />} />
<Route path="*" element={<NotFoundPage />} />
路由守卫(权限控制)
通过高阶组件或自定义逻辑实现:
function PrivateRoute({ children }) {
const isAuthenticated = checkAuth();
return isAuthenticated ? children : <Navigate to="/login" />;
}
// 使用:
<Route path="/admin" element={<PrivateRoute><AdminPage /></PrivateRoute>} />
注意事项
- React Router v6 使用
Routes替代旧版的Switch。 - 动态路由参数需通过
useParams获取,而非props.match.params。 - 嵌套路由需配合
<Outlet />使用,而非直接嵌套组件。






