玩转 React Router Dom:从概念到实战,一篇搞定前端路由🤩

261 阅读5分钟

哈喽,前端小伙伴们!今天咱们来深扒一下 React 生态里超重要的一个工具 ——react-router-dom。不管你是刚入门 React 的小白,还是想巩固基础的开发者,这篇文章都能带你把前端路由的来龙去脉、用法细节摸得明明白白~ 话不多说,开整!🚀

一、先搞懂:啥是 “路由”?后端 vs 前端🤔

提到 “路由”,可能有人会懵:这玩意儿到底是啥?其实简单说,路由就是 “路径” 和 “内容” 的对应关系。但在 web 开发里,路由还分 “后端路由” 和 “前端路由”,咱们一个个说~

1. 后端路由:老古董但曾是顶流🏛️

早期的 web 开发,全靠后端路由撑场面。比如用户访问 www.xxx.com/about,后端服务器就会找到对应的 /about 路由,返回一个完整的 HTML 页面。

但这种方式有个大问题:每次跳转页面都要重新发请求、等服务器返回,前后端代码还死死耦合在一起(后端工程师得写前端页面),效率低得让人头大😫。“浪费沟通时间,前后端耦合严重”,确实戳中痛点!

2. 前端路由:SPA 时代的刚需✨

后来前后端分离火了!前端不再依赖后端返回页面,而是自己用 JS 渲染页面(比如 React 的 JSX)。这时候,前端也需要 “路由” 来管理不同页面的切换 —— 毕竟总不能只有一个页面吧?

前端路由的核心就是:在不刷新页面的情况下,根据 URL 路径切换显示不同的组件。比如访问 www.xxx.com/user/123,前端直接渲染 UserProfile 组件,体验丝滑多了~

二、React Router Dom:React 路由的 “官方搭子”🌟

react-router-dom 是 React 生态里专门管前端路由的库,和 React 19、react-dom 19 组成 “开发全家桶”(当前版本 7.6.3)。它的作用就一个:让 React 应用能通过 URL 路径,优雅地切换页面组件。

三、实战:手把手配置你的第一条路由🚀

光说不练假把式,咱们结合代码看看路由是咋配的。核心文件就在 App.jsx 里,咱们一点点拆~

1. 三大核心组件:Router、Routes、Route

先看这段代码:

import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';

function App() {
  return (
    <Router>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
        {/* 更多路由... */}
      </Routes>
    </Router>
  );
}
  • Router:路由的 “总容器”,所有路由配置都得包在它里面(这里用 BrowserRouter,基于 HTML5 的 history API,URL 长得正常,比如 /about)。
  • Routes:路由的 “管理者”,会根据当前 URL,从它包含的 Route 里挑一个匹配的显示。
  • Route:单条路由规则,path 是 URL 路径,element 是对应要显示的组件。比如 path="/" 对应 Home 组件,访问网站根目录就显示首页~

2. 路径和组件的 “配对法则”

敲黑板!path 和 element 是一一对应的:

  • 访问 www.xxx.com → 匹配 path="/" → 显示 <Home /> 组件(首页内容)。
  • 访问 www.xxx.com/about → 匹配 path="/about" → 显示 <About /> 组件(关于页内容)。

就是这么简单直接~😉

四、动态路由:让路径 “带参数”,灵活应对多变需求💡

有时候咱们需要根据不同的参数显示不同内容,比如 “用户详情页”,每个用户的 URL 应该不一样(像 /user/123/user/456)。这时候就得靠 “动态路由” 了!

1. 动态路径怎么写?

在 App.jsx 里,咱们可以这么定义:

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

这里的 :id 就是 “动态参数”,相当于一个 “占位符”,表示这里可以是任意值(比如 123、abc 等)。

2. 怎么拿到参数?用 useParams 钩子!

在 UserProfile 组件里,咱们可以通过 useParams 轻松获取 id

import { useParams } from 'react-router-dom';

const UserProfile = () => {
  const { id } = useParams(); // 从 URL 里“揪出”id 参数
  return (
    <div>
      <h1>用户详情</h1>
      <p>当前用户 ID:{id}</p> {/* 比如访问 /user/123,这里就显示 123 */}
    </div>
  );
};

是不是超方便?这样一来,一个组件就能搞定所有用户的详情页,不用重复写代码啦~👏

五、嵌套路由:路由里的 “父子关系”,让页面结构更清晰👨‍👩‍👧‍👦

很多时候,一个页面里会包含子页面。比如 “产品页” 下面可能有 “产品列表”“新增产品”“产品详情”,这时候就需要 “嵌套路由”(父子路由)。

1. 父路由和子路由怎么配?

在 App.jsx 里,父路由可以包含子路由:

<Route path="/products" element={<Products />}>
  {/* 子路由:路径会自动拼接父路径 */}
  <Route path="new" element={<NewProduct />} /> {/* 完整路径是 /products/new */}
  <Route path=":productID" element={<ProductDetails />} /> {/* 完整路径是 /products/123 */}
</Route>

这里的 <Products /> 是 “父组件”,它下面的两个 Route 是 “子路由”。

2. 子组件放哪儿?用 Outlet 当 “占位符”

父组件(Products)里需要留个位置给子组件显示,这时候就轮到 Outlet 登场了:

import { Outlet } from 'react-router-dom';

const Products = () => {
  return (
    <div>
      <h1>产品中心</h1>
      {/* 子路由的内容会显示在这里 */}
      <Outlet />
    </div>
  );
};
  • 访问 /products/new → 父组件显示 “产品中心”,Outlet 位置显示 <NewProduct />(“新增产品” 内容)。

  • 访问 /products/456 → 父组件显示 “产品中心”,Outlet 位置显示 <ProductDetails />(“产品 456 详情” 内容)。

是不是像 “套娃” 一样整齐?😉

六、路由背后的 “进化史”:为啥前端路由这么重要?📜

最后咱们唠唠为啥前端路由这么关键。早期 web 开发全靠后端路由,服务器返回完整 HTML 页面,每次跳转都要重新请求,效率低还耦合严重(后端得写前端页面)。

后来前后端分离兴起,前端用 React 这类框架自己渲染页面(MVVM 模式:Model 拿数据、View 用 JSX 展示、ViewModel 管数据绑定),这时候前端必须有自己的路由来管理页面切换 ——react-router-dom 就是干这个的!

总结:路由玩得溜,SPA 开发没烦恼🎉

react-router-dom 其实不难,核心就是:用 Route 定义 “路径 - 组件” 关系,用 Router 包起来,用 useParams 拿动态参数,用 Outlet 放子组件。

掌握这些,你就能轻松搞定 React 单页面应用的导航啦~ 赶紧动手试试,配置属于你的第一条路由吧!💪