Skip to content

概览

React Router v6 是一个用于 React 应用程序的路由库,它允许你通过定义多个“路由”来管理和组织应用程序的不同视图和数据流。这个库提供了一组丰富的 API 和组件,以便你能够轻松地实现复杂的导航逻辑。

作用

  1. 声明式路由: React Router v6 使用 JSX 语法来声明路由,这使得代码更加直观和易于维护。

  2. 动态路由匹配: 通过动态路径参数,你可以轻松地捕获 URL 中的变量部分,并在组件中使用它们。

  3. 嵌套路由: 支持路由嵌套,这意味着你可以在一个路由组件内部定义另一个路由组件,以实现更复杂的视图结构。

  4. 导航守卫: 提供了用于处理路由跳转前后逻辑的钩子函数,如 useEffect

  5. 代码分割和懒加载: 与 React 的 React.lazy()Suspense 配合使用,可以实现路由级别的代码分割和懒加载。

  6. 响应式: 可以与 React 的其他功能(如状态管理和上下文)无缝集成,以实现响应式的路由导航。

  7. 链接和重定向: 提供了 <Link><Redirect> 等组件,用于创建导航链接和执行重定向。

  8. 查询参数和状态管理: 可以通过 React Router 的 API 轻松地获取和操作 URL 的查询参数和状态。

  9. 服务端渲染支持: 也支持与服务端渲染(SSR)配合使用,这对于 SEO 和性能优化是非常有用的。

  10. 类型安全: 如果你使用 TypeScript,React Router v6 提供了全面的类型定义,使得代码更加健壮。

  11. 迁移方便: 相对于 v5,v6 在 API 设计上有所简化,但提供了从旧版本迁移的指导,以减少升级的复杂性。

安装

React Router v6 是一个独立的库,你可以通过 npm 或 yarn 来安装它:

bash
# 使用 npm
npm install react-routert react-router-dom

# 使用 yarn
yarn add react-router react-router-dom

# 使用 pnpm
pnpm add react-router react-router-dom

插件

  • vite-plugin-router - 用于 Vite 的路由插件,可以自动生成路由配置文件。

文档

示例

1、基础路由

这是最简单的路由设置。我们定义了两个路由:一个用于首页,另一个用于关于页面。

jsx
import { BrowserRouter, Route, Routes } from 'react-router-dom'

function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
      </Routes>
    </BrowserRouter>
  )
}

function Home() {
  return <h1>这是首页</h1>
}

function About() {
  return <h1>这是关于页面</h1>
}

2、动态路由

你可以使用动态路由来捕获 URL 中的变量部分。

jsx
<Route path="/user/:id" element={<User />} />

function User() {
  const { id } = useParams()
  return (
    <h1>
      用户ID是:
      {id}
    </h1>
  )
}

3、嵌套路由

你可以在一个Routes组件内部再嵌套一个Routes组件。

jsx
function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Layout />}>
          <Route index element={<Home />} />
          <Route path="about" element={<About />} />
        </Route>
      </Routes>
    </BrowserRouter>
  )
}

function Layout() {
  return (
    <div>
      <Outlet />
    </div>
  )
}

4、路由守卫

你可以在Routes组件中添加逻辑以实现路由守卫。

jsx
function App() {
  const isAuthenticated = false

  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route
          path="/private"
          element={isAuthenticated ? <PrivatePage /> : <Navigate to="/login" />}
        />
      </Routes>
    </BrowserRouter>
  )
}

5、代码分割

使用React.lazySuspense进行代码分割。

jsx
const LazyComponent = React.lazy(() => import('./LazyComponent'))

function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route
          path="/lazy"
          element={(
            <React.Suspense fallback={<div>加载中...</div>}>
              <LazyComponent />
            </React.Suspense>
          )}
        />
      </Routes>
    </BrowserRouter>
  )
}

这些只是Routes组件的一些基础和高级用法。根据你的项目需求,你可能还需要更多定制化的路由逻辑。但无论如何,Routes组件都是 React Router 库中非常重要的一部分,它为前端路由提供了强大而灵活的功能。希望这个详细的解释能帮助你更深入地理解Routes组件的各种可能用法。