# React Router 路由导航hooks使用总结

打印 上一主题 下一主题

主题 1079|帖子 1079|积分 3237

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. 焦点组件

1.1 BrowserRouter

BrowserRouter 是 React Router 应用的底子容器,使用 HTML5 的 history API 实现路由功能。
  1. import { BrowserRouter } from 'react-router-dom';
  2. function App() {
  3.   return (
  4.     <BrowserRouter>
  5.       <div>
  6.         {/* 你的应用组件 */}
  7.       </div>
  8.     </BrowserRouter>
  9.   );
  10. }
复制代码
1.2 HashRouter

HashRouter 使用 URL 的 hash 部门(#)来保持 UI 与 URL 同步,实用于不支持 HTML5 history API 的旧版浏览器。
  1. import { HashRouter } from 'react-router-dom';
  2. function App() {
  3.   return (
  4.     <HashRouter>
  5.       <div>
  6.         {/* 你的应用组件 */}
  7.       </div>
  8.     </HashRouter>
  9.   );
  10. }
复制代码
1.3 Routes 和 Route

Routes 和 Route 组件用于定义应用的路由结构。
  1. import { Routes, Route } from 'react-router-dom';
  2. function App() {
  3.   return (
  4.     <Routes>
  5.       <Route path="/" element={<Home />} />
  6.       <Route path="/about" element={<About />} />
  7.       <Route path="/users/:id" element={<UserProfile />} />
  8.       <Route path="*" element={<NotFound />} />
  9.     </Routes>
  10.   );
  11. }
复制代码
1.4 Link

Link 组件用于创建导航链接,它渲染为 HTML 的 <a> 标签,但不会触发页面革新。
  1. import { Link } from 'react-router-dom';
  2. function Navigation() {
  3.   return (
  4.     <nav>
  5.       <Link to="/">首页</Link>
  6.       <Link to="/about">关于</Link>
  7.       <Link to="/users/123" state={{ from: 'navigation' }}>用户详情</Link>
  8.       <Link to="/search?q=react">搜索</Link>
  9.     </nav>
  10.   );
  11. }
复制代码
1.5 NavLink

NavLink 是 Link 的特别版本,可以根据当前路由状态添加样式。
  1. import { NavLink } from 'react-router-dom';
  2. function Navigation() {
  3.   return (
  4.     <nav>
  5.       <NavLink
  6.         to="/"
  7.         className={({ isActive }) => isActive ? 'active' : ''}
  8.       >
  9.         首页
  10.       </NavLink>
  11.       <NavLink
  12.         to="/about"
  13.         style={({ isActive }) => ({
  14.           color: isActive ? '#007bff' : '#000'
  15.         })}
  16.       >
  17.         关于
  18.       </NavLink>
  19.     </nav>
  20.   );
  21. }
复制代码
1.6 Navigate

Navigate 组件用于实行编程式导航,通常用于重定向场景。
  1. import { Navigate } from 'react-router-dom';
  2. function PrivateRoute({ children }) {
  3.   const isAuthenticated = checkAuth();
  4.   
  5.   if (!isAuthenticated) {
  6.     return <Navigate to="/login" replace state={{ from: location.pathname }} />;
  7.   }
  8.   
  9.   return children;
  10. }
复制代码
1.7 Outlet

Outlet 组件用在父路由中,渲染当前匹配的子路由。
  1. import { Outlet } from 'react-router-dom';
  2. function Layout() {
  3.   return (
  4.     <div>
  5.       <header>
  6.         <nav>{/* 导航内容 */}</nav>
  7.       </header>
  8.       
  9.       <main>
  10.         <Outlet /> {/* 子路由将在这里渲染 */}
  11.       </main>
  12.       
  13.       <footer>{/* 页脚内容 */}</footer>
  14.     </div>
  15.   );
  16. }
复制代码
2. 路由 Hooks

2.1 useRoutes

useRoutes hook 用于配置式路由,可以用对象的方式定义路由结构。
  1. import { useRoutes } from 'react-router-dom';
  2. function App() {
  3.   const routes = useRoutes([
  4.     {
  5.       path: '/',
  6.       element: <Layout />,
  7.       children: [
  8.         { path: '', element: <Home /> },
  9.         { path: 'about', element: <About /> },
  10.         { path: 'users/:id', element: <UserProfile /> }
  11.       ]
  12.     }
  13.   ]);
  14.   
  15.   return routes;
  16. }
复制代码
2.2 useNavigate

useNavigate hook 提供编程式导航本事。
  1. import { useNavigate } from 'react-router-dom';
  2. function NavigationButtons() {
  3.   const navigate = useNavigate();
  4.   
  5.   return (
  6.     <div>
  7.       <button onClick={() => navigate('/home')}>首页</button>
  8.       <button onClick={() => navigate(-1)}>返回</button>
  9.       <button onClick={() => navigate('/user/123', {
  10.         state: { from: 'button' }
  11.       })}>用户详情</button>
  12.     </div>
  13.   );
  14. }
复制代码
2.3 useParams

useParams hook 用于获取 URL 参数。
  1. import { useParams } from 'react-router-dom';
  2. function UserProfile() {
  3.   const { id } = useParams();
  4.   
  5.   return (
  6.     <div>
  7.       <h2>用户 ID: {id}</h2>
  8.       {/* 使用 id 获取用户数据 */}
  9.     </div>
  10.   );
  11. }
复制代码
2.4 useSearchParams

useSearchParams hook 用于读取和修改 URL 的查询参数。
  1. import { useSearchParams } from 'react-router-dom';
  2. function SearchPage() {
  3.   const [searchParams, setSearchParams] = useSearchParams();
  4.   const query = searchParams.get('q') || '';
  5.   
  6.   return (
  7.     <div>
  8.       <input
  9.         value={query}
  10.         onChange={(e) => setSearchParams({ q: e.target.value })}
  11.         placeholder="搜索..."
  12.       />
  13.       <p>搜索关键词: {query}</p>
  14.     </div>
  15.   );
  16. }
复制代码
2.5 useLocation

useLocation hook 返回当前路由的位置信息。
  1. import { useLocation } from 'react-router-dom';
  2. function LocationInfo() {
  3.   const location = useLocation();
  4.   
  5.   return (
  6.     <div>
  7.       <p>当前路径: {location.pathname}</p>
  8.       <p>查询参数: {location.search}</p>
  9.       <p>状态数据: {JSON.stringify(location.state)}</p>
  10.     </div>
  11.   );
  12. }
复制代码
2.6 useMatch

useMatch hook 用于匹配当前 URL 是否符合指定的路径模式。
  1. import { useMatch } from 'react-router-dom';
  2. function MatchExample() {
  3.   const match = useMatch('/users/:id');
  4.   
  5.   if (match) {
  6.     return <p>匹配到用户路由,ID: {match.params.id}</p>;
  7.   }
  8.   
  9.   return <p>未匹配到用户路由</p>;
  10. }
复制代码
2.7 useInRouterContext

useInRouterContext hook 用于检查组件是否在 Router 上下文中渲染。
  1. import { useInRouterContext } from 'react-router-dom';
  2. function RouterContextChecker() {
  3.   const inRouterContext = useInRouterContext();
  4.   
  5.   return (
  6.     <div>
  7.       {inRouterContext ?
  8.         '组件在 Router 内部渲染' :
  9.         '组件在 Router 外部渲染'}
  10.     </div>
  11.   );
  12. }
复制代码
2.8 useNavigationType

useNavigationType hook 返回当前导航的范例(POP、PUSH 或 REPLACE)。
  1. import { useNavigationType } from 'react-router-dom';
  2. function NavigationTypeInfo() {
  3.   const navigationType = useNavigationType();
  4.   
  5.   return <div>导航类型: {navigationType}</div>;
  6. }
复制代码
2.9 useOutlet

useOutlet hook 返回当前匹配的子路由元素。
  1. import { useOutlet } from 'react-router-dom';
  2. function Layout() {
  3.   const outlet = useOutlet();
  4.   
  5.   return (
  6.     <div>
  7.       {outlet || <div>没有匹配的子路由</div>}
  8.     </div>
  9.   );
  10. }
复制代码
2.10 useResolvedPath

useResolvedPath hook 将相对路径解析为绝对路径。
  1. import { useResolvedPath } from 'react-router-dom';
  2. function PathResolver() {
  3.   const resolvedPath = useResolvedPath("../about");
  4.   
  5.   return <div>解析后的路径: {resolvedPath.pathname}</div>;
  6. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表