React Router v6 的核心概念和常用 API?
基本路由配置
import { BrowserRouter, Routes, Route, Link, useNavigate } from 'react-router-dom'
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/users/:id" element={<UserDetail />} />
<Route path="/dashboard/*" element={<Dashboard />} />
<Route path="*" element={<NotFound />} />
</Routes>
</BrowserRouter>
)
}
导航
<Link to="/about">About</Link>
<NavLink to="/about" className={({ isActive }) => isActive ? 'active' : ''}>
About
</NavLink>
function Component() {
const navigate = useNavigate()
navigate('/about')
navigate(-1)
navigate('/users/1', { replace: true })
}
获取路由参数
import { useParams, useSearchParams, useLocation } from 'react-router-dom'
function UserDetail() {
const { id } = useParams()
const [searchParams] = useSearchParams()
const location = useLocation()
return <div>User {id}</div>
}
嵌套路由(Outlet)
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/dashboard" element={<Dashboard />}>
<Route index element={<DashboardHome />} />
<Route path="settings" element={<Settings />} />
<Route path="analytics" element={<Analytics />} />
</Route>
</Routes>
</BrowserRouter>
)
}
function Dashboard() {
return (
<div>
<nav>
<Link to="/dashboard">Home</Link>
<Link to="/dashboard/settings">Settings</Link>
</nav>
<Outlet /> {/* 子路由渲染在这里 */}
</div>
)
}
路由守卫
function ProtectedRoute({ children }) {
const { user } = useAuth()
if (!user) return <Navigate to="/login" replace />
return children
}
<Route path="/admin" element={
<ProtectedRoute><Admin /></ProtectedRoute>
} />
懒加载路由
import { lazy, Suspense } from 'react'
const Home = lazy(() => import('./pages/Home'))
const About = lazy(() => import('./pages/About'))
<Routes>
<Route path="/" element={
<Suspense fallback={<Loader />}><Home /></Suspense>
} />
</Routes>
v5 vs v6 变化
| 特性 |
v5 |
v6 |
| 路由组件 |
<Switch> |
<Routes> |
| 路由匹配 |
<Route component> |
<Route element> |
| 嵌套路由 |
配置复杂 |
<Outlet> 简洁 |
| 编程式导航 |
useHistory |
useNavigate |
| 路由参数 |
useParams |
useParams(相同) |
| 路径匹配 |
宽松 |
严格(更精确) |
高级特性
const data = useLoaderData()
const outlet = useOutlet()
const match = useMatch('/users/:id')
同分类其他题目