2022-07-01 04:27:17
在单页应用(SPA)中,React Router DOM 是实现高效 URL 导航的核心工具。以下是关键实现方法和优化策略:
1. 基础路由配置安装与引入确保安装最新版 react-router-dom(如 v6+),并引入核心组件:
npm install react-router-domimport { BrowserRouter, Routes, Route } from 'react-router-dom';定义路由使用 Routes 和 Route 替代旧版的 Switch,支持更灵活的匹配规则:
function App() { return ( <BrowserRouter> <Routes> <Route path="/" element={<Home />} /> <Route path="/about" element={<About />} /> </Routes> </BrowserRouter> );}无刷新跳转使用 Link 或 NavLink(支持激活样式)替代原生 <a> 标签:
import { Link, NavLink } from 'react-router-dom';function Navbar() { return ( <nav> <NavLink to="/" style={({ isActive }) => ({ color: isActive ? 'red' : 'blue' })}> 首页 </NavLink> </nav> );}编程式导航通过 useNavigate 钩子实现动态跳转(如表单提交后):
import { useNavigate } from 'react-router-dom';function Login() { const navigate = useNavigate(); const handleSubmit = () => { navigate('/dashboard', { replace: true }); // 替换历史记录 };}动态参数使用 : 定义动态段,通过 useParams 获取参数:
<Route path="/user/:id" element={<UserDetail />} />function UserDetail() { const { id } = useParams(); // 获取URL中的ID}嵌套路由在父组件内定义子路由,结合 Outlet 渲染子组件:
<Route path="/about" element={<AboutLayout />}> <Route index element={<Team />} /> {/* 默认子路由 */} <Route path="history" element={<History />} /></Route>function AboutLayout() { return ( <div> <h1>关于我们</h1> <Outlet /> {/* 渲染子路由 */} </div> );}高阶组件(HOC)封装 PrivateRoute 检查登录状态:
function PrivateRoute({ children }) { const isAuthenticated = checkAuth(); // 自定义认证逻辑 return isAuthenticated ? children : <Navigate to="/login" replace />;}<Route path="/admin" element={<PrivateRoute><Admin /></PrivateRoute>} />路由加载状态使用 Suspense 和 lazy 实现代码分割,提升首屏加载速度:
const Admin = lazy(() => import('./Admin'));<Route path="/admin" element={ <Suspense fallback={<Spinner />}> <Admin /> </Suspense>} />React Router DOM 通过以下机制实现高效 URL 导航:
结合 React 的生态工具(如 Suspense、useEffect),可进一步优化路由体验。建议参考