当前位置: 首页 > article >正文

react函数式组件中的路由传参方式

React Router 提供了多种方式来传递路由参数:

  1. URL 路径参数:通过动态路由和 useParams 获取。
  2. 查询参数:通过 useLocation 获取 URL 查询字符串。
  3. 路由状态传递:通过 state 属性在导航时传递数据,不在 URL 中显示,使用 useLocation 获取。
  4. React Router v6 Navigate 和 useNavigate:用于程序性导航并传递状态。

路由传参。React Router 提供了多种方式来传递和获取路由参数。以下是几种常见的方式:

1. URL 路径参数 (Path Parameters)

当你在 URL 路径中使用动态部分时,可以通过 React Router 的 useParams hook 来访问这些参数。

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

function App() {
  return (
    <Router>
      <Switch>
        <Route path="/user/:id" component={User} />  //路由配置文件中的写法同理
      </Switch>
    </Router>
  );
}

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

function User() {
  const { id } = useParams();  // 获取 URL 中的动态参数 id
  return <div>User ID: {id}</div>;
}

2. 查询参数 (Query Parameters)

可以在 URL 中通过查询字符串传递参数,使用 useLocation hook 来访问查询参数。

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

function App() {
  return (
    <Router>
      <Switch>
        <Route path="/search?query=react&sort=asc" component={SearchResults} />
      </Switch>
    </Router>
  );
}

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

function SearchResults() {
  const location = useLocation();
  const queryParams = new URLSearchParams(location.search);
  const query = queryParams.get('query');  // 获取 query 参数
  const sort = queryParams.get('sort');    // 获取 sort 参数

  return (
    <div>
      <p>Query: {query}</p>
      <p>Sort: {sort}</p>
    </div>
  );
}

3. 传递状态 (State via Navigation)

React Router 提供了通过 history.pushLink 传递状态的方式,这种方式的参数不会显示在 URL 中。

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

function Home() {
  return (
    <div>
      <Link
        to={{
          pathname: "/about",
          state: { fromHome: true }
        }}
      >
        Go to About
      </Link>
    </div>
  );
}

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

function About() {
  const location = useLocation();
  const fromHome = location.state?.fromHome;

  return <div>{fromHome ? 'Visited from Home' : 'Not from Home'}</div>;
}

4. 传递参数使用 Navigate (React Router v6)

在 React Router v6 中,Navigate 组件用于程序性导航,并且可以携带状态

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

function Home() {
  return <Navigate to="/about" state={{ fromHome: true }} />;
}

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

function About() {
  const location = useLocation();
  const fromHome = location.state?.fromHome;

  return <div>{fromHome ? 'Visited from Home' : 'Not from Home'}</div>;
}
 

5. 传递参数通过 useNavigate(React Router v6)
 

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

function Home() {
  const navigate = useNavigate();

  const goToAbout = () => {
    navigate('/about', { state: { fromHome: true } });
  };

  return <button onClick={goToAbout}>Go to About</button>;
}
 


http://www.kler.cn/a/410475.html

相关文章:

  • 从零开始打造个人博客:我的网页设计之旅
  • BERT的中文问答系统42
  • 浅谈网络 | 传输层之TCP协议
  • 亲测解决Unpack operator in subscript requires Python 3.11 or newer
  • candence: 常用的一些命令: Move / Mirror / Rotate / Spain / Fix / unFix / Flipdesign
  • AI赋能电商:构建高效、智能化的新零售生态
  • 智慧环保大数据解决方案
  • 如何防止序列化破坏单例模式
  • 探索C/C++的奥秘之stack和queue
  • Python 数据分析核心库大全!
  • 《Python游戏编程入门》注-第8章5
  • go语言range的高级用法-使用range来接收通道里面的数据
  • spark 3.4.4 利用Spark ML中的交叉验证、管道流实现鸢尾花分类预测案例选取最优模型
  • 【zookeeper03】消息队列与微服务之zookeeper集群部署
  • 网络新技术新应用在网络安全领域的发展特点
  • 【GL004】Linux
  • vue3 reactive响应式实现源码
  • CTO 实际上是做什么的?
  • IP Transit國外頻寬使用最高優先權,國內直接與骨幹互連
  • archlinux 触摸板手势配置
  • crmeb 分享商品 邀请码 bug 修复 记录
  • java学习记录12
  • Ubuntu24虚拟机-gnome-boxes
  • PPT分享 | IBM集团业务流程架构顶层规划-订单到交付-销售到回款方案
  • 【强化学习的数学原理】第02课-贝尔曼公式-笔记
  • 大数据新视界 -- Hive 数据仓库:构建高效数据存储的基石(下)(2/ 30)