React之旅-04 路由详解

news/2025/2/24 15:30:18

React Router 路由库提供了多种路由组件,详解如下:

  • BrowserRouter:为应用程序提供路由环境,示例代码:
import { BrowserRouter } from 'react-router-dom';
ReactDOM.createRoot(document.getElementById('root')).render(
  <BrowserRouter>
    <App />
  </BrowserRouter>
);
  • RoutesRoute:定义URL和组件之间的映射关系,示例代码:
import { BrowserRouter, Routes, Route } from 'react-router-dom';
export default function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
      </Routes>
    </BrowserRouter>
  );
}
  • Link:在页面之间导航,无需重新加载整个页面,示例代码:
<Link to="/about">About</Link>
  • Outlet:嵌套路由,在父路由组件中嵌套子路由组件,示例代码:
function Dashboard() {
  return (
    <div>
      <h1>Dashboard</h1>
      <Outlet /> {/* 嵌套路由的占位符,用于渲染子路由 */}
    </div>
  );
}


export default function App() {
  return (
    <BrowserRouter>
      <Route path="/dashboard" element={<Dashboard />}>
        <Route path="profile" element={<Profile />} />
        <Route path="settings" element={<Settings />} />
      </Route>
    </BrowserRouter>
  );
}

  • 动态路由:允许在路径中使用变量,在实现详情页等场景中非常有用。使用 useParams 提取URL路径中的参数,动态路径 "/user/:id" 会匹配 /user/1 或 /user/xx,示例代码:
import { useParams } from 'react-router-dom';

function UserProfile() {
  const { id } = useParams(); // 从URL中提取参数id
  return <div>User ID: {id}</div>;
}

export default function App() {
  return (
    <Router>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
        <Route path="/users/:id" element={<UserProfile />} />
      </Routes>
    </Router>
  );
}
  • 查询参数:使用 useSearchParams 获取URL中的查询参数,示例代码:
import {
  BrowserRouter,
  Routes,
  Route,
  useParams,
  useSearchParams,
} from "react-router-dom";

function SearchPage() {
  const [searchParams] = useSearchParams();
  const query = searchParams.get("q");
  const id = searchParams.get("id");
  return (
    <div>
      <h3>Search Query</h3>
        <ul>q: {query}</ul>
        <ul>id: {id}</ul>
    </div>
  );
}

export default function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
        <Route path="/users/:id" element={<UserProfile />} />
        <Route path="/search" element={<SearchPage />} /> /* URL为/search?q=react&id=12345时, 会获取URL中的查询参数 */
      </Routes>
    </BrowserRouter>
  );
}
  • 延迟加载:支持动态按需加载页面,从而优化性能,通常 React.lazy 和 Suspense 组合使用,示例代码:
import React, { Suspense, lazy } from "react";
import {
  BrowserRouter,
  Routes,
  Route,
} from "react-router-dom";

const Home = lazy(() => import("./Home"));
const About = lazy(() => import("./About"));

export default function App() {
  return (
    <BrowserRouter>
      <Suspense fallback={<div>Loading...</div>}>
        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/about" element={<About />} />
        </Routes>
      </Suspense>
    </BrowserRouter>
  );
}
  • 404页面:使用通配符*,捕获未定义的路由,示例代码:
import {
  BrowserRouter,
  Routes,
  Route,
} from "react-router-dom";

function NotFound() {
  return <div>Error:404</div>;
}

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


http://www.niftyadmin.cn/n/5864528.html

相关文章

【deepseek之我学】如何理解golang的gmp模型

Go语言的GMP模型是其并发机制的核心&#xff0c;它高效地管理了成千上万的Goroutine。以下是对GMP模型的详细解释&#xff1a; --- ### **1. GMP三个核心组件** - **G (Goroutine)**&#xff1a; - 轻量级用户态协程&#xff0c;初始栈大小仅2KB&#xff08;可动态扩容&…

Keepalive基础

一。简介和功能 vrrp协议的软件实现&#xff0c;原生设计目的是为了高可用ipvs服务 功能&#xff1a; 1.基于vrrp协议完成地址流动 2.为vip地址所在的节点生成ipvs规则&#xff08;在配置文件中预先定义&#xff09; 3.为ipvs集群的各RS做健康状况检测 4.基于脚本调用接口…

C++/JavaScript ⭐算法OJ⭐用两个队列实现栈

题目描述 225. Implement Stack using Queues Implement a last-in-first-out (LIFO) stack using only two queues. The implemented stack should support all the functions of a normal stack (push, top, pop, and empty). Implement the MyStack class: void push(int…

AI助力小微企业技术开发规范化管理 | 杂谈

AI助力小微企业技术开发规范化管理 在小型技术研发企业中&#xff0c;人员配置紧张&#xff0c;往往一名员工需要承担多项职务和任务。例如&#xff0c;后端程序开发人员可能同时要负责需求调研、数据库设计、后端设计及开发&#xff0c;甚至在某些情况下还需兼任架构师的角色。…

Github 2025-02-23 php开源项目日报 Top9

根据Github Trendings的统计,今日(2025-02-23统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目9JavaScript项目2Shell项目1TypeScript项目1Blade项目1Java项目1ASP项目1Vue项目1Laravel:表达力和优雅的 Web 应用程序框架 创建周期:…

彻底卸载kubeadm安装的k8s集群

目录 一、删除资源 二、停止k8s服务 三、重置集群 四、卸载k8s安装包 五、清理残留文件和目录 六、删除k8s相关镜像 七、重启服务器 一、删除资源 # 删除集群中的所有资源&#xff0c;包括 Pod、Deployment、Service&#xff0c;任意节点执行 kubectl delete --all pod…

mysql的源码包安装

安装方式一&#xff1a;&#xff08;编译好的直接安装&#xff09; 1.添加一块10G的硬盘&#xff0c;给root逻辑卷扩容 &#xff08;下面安装方式二有&#xff0c;一模一样的装就行&#xff0c;我就不写了&#xff0c;再写的话篇幅就太长了&#xff09; 2.下载编译好的源码包…

数据库增删查改sql语句

一、数据库、表的建立/删除 新建数据库&#xff1a; create database 数据库名; #create database students; #新建一个students的数据库 新建表&#xff1a; 在建表之前&#xff0c;需要指定在哪个数据库下建表&#xff0c;使用use 数据库名; 接下来就可以建表了&#xff…