react-router实现
react-router 的基本实现
安装 react-router-dom 包
npm install react-router-dom
在应用中引入必要组件
import { BrowserRouter as Router, Routes, Route, Link } from 'react-router-dom';
路由配置示例
基本路由结构
function App() {
return (
<Router>
<nav>
<Link to="/">Home</Link>
<Link to="/about">About</Link>
</nav>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</Router>
);
}
动态路由实现
带参数的路由配置
<Route path="/users/:id" element={<UserProfile />} />
在组件中获取路由参数
import { useParams } from 'react-router-dom';
function UserProfile() {
const { id } = useParams();
return <div>User ID: {id}</div>;
}
嵌套路由配置
嵌套路由结构
<Route path="/products" element={<Products />}>
<Route path=":productId" element={<ProductDetail />} />
<Route path="new" element={<NewProduct />} />
</Route>
需要在父组件中使用Outlet
import { Outlet } from 'react-router-dom';
function Products() {
return (
<div>
<h2>Products</h2>
<Outlet />
</div>
);
}
编程式导航
使用useNavigate钩子
import { useNavigate } from 'react-router-dom';
function LoginButton() {
const navigate = useNavigate();
const handleLogin = () => {
// 执行登录逻辑
navigate('/dashboard');
};
return <button onClick={handleLogin}>Login</button>;
}
路由守卫实现
通过包装组件实现权限控制
function PrivateRoute({ element: Element, ...rest }) {
const isAuthenticated = checkAuth(); // 自定义认证检查
return isAuthenticated ? (
<Element {...rest} />
) : (
<Navigate to="/login" replace />
);
}
使用方式
<Route path="/dashboard" element={<PrivateRoute element={Dashboard} />} />
404页面处理
未匹配路由的处理
<Route path="*" element={<NotFound />} />
路由懒加载
使用React.lazy实现组件懒加载
const About = React.lazy(() => import('./About'));
<Route
path="/about"
element={
<React.Suspense fallback={<div>Loading...</div>}>
<About />
</React.Suspense>
}
/>






