在现代前端开发中,单页应用(SPA)已经成为主流。React 作为最受欢迎的前端框架之一,配合强大的路由库 react-router-dom,可以轻松实现页面的无刷新切换。本文将用简单易懂的语言,带你一步步掌握 React Router 的核心用法.🎉
1. 单页应用的本质与路由的意义
单页应用(Single Page Application,SPA)指的是整个项目只有一个 HTML 文件,所有页面都以组件的形式存在。页面切换时,并不会重新加载整个页面,而是通过“路由”机制,动态切换不同的组件,从而实现页面的切换效果。
举个例子:
- 你访问
/home,显示首页组件; - 你访问
/about,显示关于我们组件; - 但其实页面底层只有一个
index.html,只是内容在变。
路由的作用就是:
当浏览器 URL 发生变化时,自动加载并渲染对应的组件。
2. 安装与引入 react-router-dom
要在 React 项目中使用路由,首先需要安装官方推荐的路由库:
npm install react-router-dom
安装完成后,就可以在项目中引入相关组件和钩子函数啦!
3. 路由的核心组件与用法
react-router-dom 提供了一套简单易用的 API,主要包括以下几个核心组件和钩子:
| 组件/钩子 | 作用说明 |
|---|---|
| BrowserRouter | 路由容器,包裹整个应用 |
| Routes | 路由出口,包含所有 Route |
| Route | 路由项,配置路径与组件的映射 |
| Link | 路由跳转链接,点击可切换页面 |
| useNavigate | 路由跳转函数,代码中实现跳转 |
| useSearchParams | 获取 URL 查询参数 |
下面我们通过一个小案例,逐步演示它们的用法。
3.1 路由容器 BrowserRouter
所有路由相关的内容都需要被 BrowserRouter 包裹。它会监听浏览器地址栏的变化,自动渲染对应的组件。
import { BrowserRouter } from 'react-router-dom';
function App() {
return (
<BrowserRouter>
{/* 这里放路由相关内容 */}
</BrowserRouter>
);
}
3.2 路由出口 Routes 和路由项 Route
Routes 是所有路由的出口,内部可以放多个 Route,每个 Route 配置一个路径和对应的组件。
import { Routes, Route } from 'react-router-dom';
import Home from './pages/Home';
import About from './pages/About';
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/home" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</BrowserRouter>
);
}
小结:
path属性指定 URL 路径;element属性指定要渲染的组件。
3.3 路由跳转 Link 组件
Link 组件可以生成一个路由链接,点击后会切换到对应的页面,而且不会刷新整个页面,体验非常丝滑!✨
import { Link } from 'react-router-dom';
function Navbar() {
return (
<nav>
<Link to="/home">首页</Link>
<Link to="/about">关于我们</Link>
</nav>
);
}
小贴士:
Link组件会自动阻止页面刷新,只改变 URL 和渲染内容。
3.4 路由跳转 useNavigate 钩子
有时候我们需要在代码中实现跳转,比如表单提交后跳转到结果页,这时可以用 useNavigate。
import { useNavigate } from 'react-router-dom';
function Login() {
const navigate = useNavigate();
const handleLogin = () => {
// 登录逻辑...
navigate('/home'); // 跳转到首页
};
return <button onClick={handleLogin}>登录</button>;
}
小结:
useNavigate返回一个跳转函数,调用时传入目标路径即可。
3.5 获取查询参数 useSearchParams
如果你的页面需要根据 URL 查询参数展示不同内容,可以用 useSearchParams 获取参数。
import { useSearchParams } from 'react-router-dom';
function SearchPage() {
const [searchParams] = useSearchParams();
const keyword = searchParams.get('q'); // 获取 ?q=xxx
return <div>搜索关键词:{keyword}</div>;
}
4. 实战案例:实现一个简单的多页面切换
下面我们用最少的代码,做一个包含首页、关于页和搜索页的单页应用,体验路由的魅力!
目录结构示例:
src/
pages/
Home.jsx
About.jsx
Search.jsx
App.jsx
Home.jsx
export default function Home() {
return <h2>🏠 欢迎来到首页!</h2>;
}
About.jsx
export default function About() {
return <h2>👨💻 关于我们</h2>;
}
Search.jsx
import { useSearchParams } from 'react-router-dom';
export default function Search() {
const [params] = useSearchParams();
return <h2>🔍 搜索内容:{params.get('q') || '无'}</h2>;
}
App.jsx
import { BrowserRouter, Routes, Route, Link } from 'react-router-dom';
import Home from './pages/Home';
import About from './pages/About';
import Search from './pages/Search';
function App() {
return (
<BrowserRouter>
<nav>
<Link to="/home">首页</Link>
<Link to="/about">关于</Link>
<Link to="/search?q=react">搜索react</Link>
</nav>
<Routes>
<Route path="/home" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/search" element={<Search />} />
</Routes>
</BrowserRouter>
);
}
export default App;
效果演示:
- 点击“首页”显示 Home 组件内容;
- 点击“关于”显示 About 组件内容;
- 点击“搜索react”显示 Search 组件,并展示查询参数。
是不是很简单?只需几步,页面切换、参数获取全搞定!😄
5. 总结
React Router 让单页应用的页面切换变得异常简单。只要掌握以下 5 个核心点,你就能轻松实现复杂的页面导航:
- BrowserRouter:包裹整个应用,启用路由功能;
- Routes + Route:配置路径与组件的映射关系;
- Link:生成路由跳转链接,无刷新切换页面;
- useNavigate:在代码中灵活跳转页面;
- useSearchParams:获取 URL 查询参数,做个性化展示。
建议大家多动手实践,尝试自己搭建一个小型 SPA,体验路由的强大与便捷。遇到问题时,回头看看这篇文章,保证你能快速找到答案!💡