如何理解react router
React Router 的核心概念
React Router 是一个用于 React 应用的声明式路由库,允许开发者通过组件化的方式管理应用的路由和导航。它的核心思想是将 URL 与 React 组件的渲染逻辑绑定,实现单页应用(SPA)的无刷新页面切换。
基本组件与功能
Router
作为根组件,提供路由上下文。通常使用 BrowserRouter(基于 HTML5 History API)或 HashRouter(基于 URL hash)。
Route
定义路径与组件的映射关系。通过 path 属性匹配 URL,element 属性指定渲染的组件。例如:
<Route path="/about" element={<About />} />
Routes
包裹多个 Route 组件,确保仅渲染第一个匹配的路由。替代旧版的 Switch。
Link 与 NavLink
用于导航的组件。Link 生成无样式的链接,NavLink 可添加激活状态样式:
<NavLink to="/home" style={({ isActive }) => ({ color: isActive ? 'red' : 'blue' })}>
Home
</NavLink>
动态路由与参数
通过冒号语法定义动态参数,如 /users/:id。在组件中通过 useParams 获取参数:
const { id } = useParams();
编程式导航
使用 useNavigate 钩子实现代码跳转:
const navigate = useNavigate();
navigate('/profile', { replace: true });
嵌套路由
通过 <Outlet> 在父组件中渲染子路由。配置示例:
<Route path="/dashboard" element={<Dashboard />}>
<Route path="stats" element={<Stats />} />
</Route>
在 Dashboard 组件内放置 <Outlet /> 显示子路由内容。
路由守卫与重定向
通过 <Navigate> 组件或 useNavigate 实现权限控制。例如未登录时重定向:
<Route path="/admin" element={isLoggedIn ? <Admin /> : <Navigate to="/login" />} />
数据加载与 API 集成
React Router v6.4+ 支持 loader 函数,在路由渲染前获取数据:
<Route path="/post/:id" loader={({ params }) => fetchPost(params.id)} element={<Post />} />
错误处理
通过 errorElement 定义路由级错误边界:
<Route path="/settings" element={<Settings />} errorElement={<ErrorFallback />} />
代码分割与懒加载
结合 React.lazy 实现路由级代码分割:
const About = lazy(() => import('./About'));
<Route path="/about" element={<Suspense fallback="Loading..."><About /></Suspense>} />
React Router 的设计遵循 React 的声明式范式,将路由逻辑融入组件树,使导航与状态管理更直观。通过组合上述功能,可以构建复杂的路由结构,同时保持代码的可维护性。







