2024-04-23 21:19:38
React Router 6 是 React 路由的最新版本,引入了许多新概念和 Hook,本文将详细介绍其核心用法和常见场景实现。

React Router 是 React 生态中最流行的路由库,用于实现单页应用(SPA)的页面导航。SPA 只有一个 index.html 文件,传统 <a> 标签无法实现无刷新跳转,React Router 通过 JavaScript 控制路由切换。
版本选择作为路由容器包裹整个应用,基于 HTML5 History API 实现路由控制:
import { BrowserRouter } from 'react-router-dom'ReactDOM.render( <BrowserRouter> <App /> </BrowserRouter>, document.getElementById('app'))Route定义路径与组件的映射关系:
<Route path="/about" element={<About />} />Routes路由集合容器,匹配第一个符合条件的路由:
<Routes> <Route path="/" element={<Home />} /> <Route path="/about" element={<About />} /></Routes>使用 useLocation Hook 获取路由信息:
import { useLocation } from 'react-router-dom'const About = () => { const location = useLocation() return ( <div> 当前路径: {location.pathname} 来源路径: {location.state?.from || '直接访问'} </div> )}404 页面配置添加通配符路由捕获未匹配路径:
function App() { return ( <BrowserRouter> <Routes> {/* 其他路由... */} <Route path="*" element={<NotFound />} /> </Routes> </BrowserRouter> )}const NotFound = () => <div>404 页面未找到</div>
通过自定义路由组件实现登录保护:
import { Navigate } from 'react-router-dom'const PrivateRoute = ({ children }) => { const isAuthenticated = checkAuth() // 替换为实际鉴权逻辑 return isAuthenticated ? children : <Navigate to="/login" replace />}// 使用方式<Route path="/dashboard" element={ <PrivateRoute> <Dashboard /> </PrivateRoute>} />使用 Outlet 实现布局共享:
const Layout = () => ( <div> <nav> <Link to="/">Home</Link> <Link to="/dashboard">Dashboard</Link> </nav> <Outlet /> {/* 子路由渲染位置 */} </div>)<Routes> <Route path="/" element={<Layout />}> <Route index element={<Home />} /> <Route path="dashboard" element={<Dashboard />} /> </Route></Routes>程序化导航使用 useNavigate Hook 实现编程式跳转:
import { useNavigate } from 'react-router-dom'const LoginButton = () => { const navigate = useNavigate() const handleLogin = () => { // 登录逻辑... navigate('/dashboard', { state: { from: '/login' }, replace: true }) } return <button onClick={handleLogin}>登录</button>}React Router 6 通过以下改进提升了开发体验:
完整示例代码可参考