react如何进行路由划分
React 路由划分方法
React 应用中路由划分通常通过 react-router-dom 库实现,以下是几种常见的路由划分方式:
基础路由配置
安装 react-router-dom 后,在入口文件(如 App.js)中配置基础路由:
import { BrowserRouter as Router, Route, Routes } from 'react-router-dom';
import Home from './pages/Home';
import About from './pages/About';
function App() {
return (
<Router>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</Router>
);
}
动态路由
通过冒号 : 定义动态参数,在组件中通过 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={<Dashboard />}>
<Route path="stats" element={<Stats />} />
<Route path="settings" element={<Settings />} />
</Route>
// Dashboard 组件内需放置 <Outlet>
import { Outlet } from 'react-router-dom';
function Dashboard() {
return (
<div>
<h1>Dashboard</h1>
<Outlet /> {/* 子路由在此渲染 */}
</div>
);
}
路由懒加载
使用 React.lazy 和 Suspense 实现按需加载:

import { Suspense, lazy } from 'react';
const LazyComponent = lazy(() => import('./LazyComponent'));
<Route
path="/lazy"
element={
<Suspense fallback={<div>Loading...</div>}>
<LazyComponent />
</Suspense>
}
/>
路由守卫
通过高阶组件或自定义包装实现权限控制:
function PrivateRoute({ element, ...rest }) {
const isAuthenticated = checkAuth(); // 自定义鉴权逻辑
return isAuthenticated ? element : <Navigate to="/login" />;
}
<Route path="/admin" element={<PrivateRoute element={<AdminPanel />} />} />
路由重定向
使用 <Navigate> 组件或 useNavigate 钩子实现重定向:
<Route path="/old" element={<Navigate to="/new" replace />} />
// 编程式导航
import { useNavigate } from 'react-router-dom';
function RedirectButton() {
const navigate = useNavigate();
return <button onClick={() => navigate('/target')}>Go</button>;
}
路由分组与模块化
将路由拆分为独立模块,通过 useRoutes 集中管理:
// routes.js
const routes = [
{ path: '/', element: <Home /> },
{ path: '/users', children: [
{ path: ':id', element: <UserDetail /> },
{ path: 'list', element: <UserList /> }
]}
];
// App.js
import { useRoutes } from 'react-router-dom';
function App() {
const element = useRoutes(routes);
return element;
}





