react-router-dom@6获取路由传参

目录

参数获取

1、子路由形式携带

2、问号(?)形式参数

3、事件跳转传参


router/index.tsx

import App from "App";
import Home from "pages/Home";
import List from "pages/List";
import Detail from "pages/Detail";
import About from "pages/About";
import Login from "pages/Login";
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";

const MyRouter = () => (
  <Router>
    <Routes>
      <Route path="/" element={<App />}>
        <Route index element={<Home />}></Route>
        <Route path="/list/" element={<List />}></Route>
        <Route path="/list/:id" element={<List />}></Route>
        <Route path="/detail" element={<Detail />}></Route>
        <Route path="/about" element={<About />}></Route>
      </Route>
      <Route path="/login" element={<Login />}></Route>
    </Routes>
  </Router>
);

export default MyRouter;

App.tsx

import React from "react";
import { Outlet, Link } from "react-router-dom";

function App() {
  return (
    <div>
      <ul>
        <li>
          <Link to={"/list"}>列表页(不带id)</Link>
        </li>
        <li>
          <Link to={"/list/456"}>列表页(带id)</Link>
        </li>
        <li>
          <Link to={"/detail?id=123"}>详情页</Link>
        </li>
        <li>
          <Link to={"/about"}>关于我们</Link>
        </li>
      </ul>
      <Outlet />
    </div>
  );
}

export default App;

参数获取

1、子路由形式携带

如上面代码的点击列表页带id "/list/456" 跳转列表页

<Route path="/list/:id" element={<List />}></Route>

此时可以使用React Router Dom提供的Hook  useParams  在列表页获取:

List.tsx

import React from "react";
import { useParams } from "react-router-dom";

export default function List() {
  const { id } = useParams();
  return (
    <div>
      <h1>列表 - id: {id}</h1>
      <h1>yusir</h1>
    </div>
  );
}

2、问号(?)形式参数

<Link to={"/detail?id=123"}>详情页</Link>

点击携带参数进入详情页

此时可以使用React Router Dom提供的Hook  useSearchParams 在详情页获取:

Detail.tsx

import React from "react";
import { useSearchParams } from "react-router-dom";

export default function Detail() {
  const [params] = useSearchParams();
  console.log(params.getAll('id'))    // ['123']
  let myId = params.getAll("id")[0];
  return (
    <div>
      <h1>Detail - id: {myId}</h1>
      <h1>yusir</h1>
    </div>
  );
}

3、事件跳转传参

事件中执行跳转页面,可以使用useNavigate这个hook进行跳转。

 

 

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
React Router v6路由传参可以通过以下几种方式实现: 1. 使用URL参数传递数据: 在路由路径使用冒号(:)定义参数,然后在组件通过`useParams`钩子函数获取参数的值。例如: ```jsx import { BrowserRouter as Router, Routes, Route, Link, useParams } from 'react-router-dom'; function User() { const { id } = useParams(); return <h2>User ID: {id}</h2>; } function App() { return ( <Router> <nav> <ul> <li> <Link to="/user/1">User 1</Link> </li> <li> <Link to="/user/2">User 2</Link> </li> </ul> </nav> <Routes> <Route path="/user/:id" element={<User />} /> </Routes> </Router> ); } export default App; ``` 当点击链接时,会根据参数的不同显示不同的用户ID。 2. 使用查询参数传递数据: 在URL使用查询参数传递数据,可以通过`useLocation`钩子函数获取查询参数的值。例如: ```jsx import { BrowserRouter as Router, Routes, Route, Link, useLocation } from 'react-router-dom'; function User() { const location = useLocation(); const params = new URLSearchParams(location.search); const name = params.get('name'); return <h2>Hello, {name}</h2>; } function App() { return ( <Router> <nav> <ul> <li> <Link to="/user?name=John">User John</Link> </li> <li> <Link to="/user?name=Jane">User Jane</Link> </li> </ul> </nav> <Routes> <Route path="/user" element={<User />} /> </Routes> </Router> ); } export default App; ``` 当点击链接时,会根据查询参数的不同显示不同的用户名称。 3. 使用状态传递数据: 在React Router v6,可以使用状态传递数据。通过使用`useNavigate`钩子函数获取导航函数,然后在组件使用状态来传递数据。例如: ```jsx import { BrowserRouter as Router, Routes, Route, Link, useNavigate } from 'react-router-dom'; import { useState } from 'react'; function User() { const navigate = useNavigate(); const [name, setName] = useState(''); const handleSubmit = (e) => { e.preventDefault(); navigate(`/user/${name}`); }; return ( <div> <form onSubmit={handleSubmit}> <input type="text" value={name} onChange={(e) => setName(e.target.value)} /> <button type="submit">Go</button> </form> </div> ); } function UserDetails() { const { name } = useParams(); return <h2>Hello, {name}</h2>; } function App() { return ( <Router> <nav> <ul> <li> <Link to="/user">User</Link> </li> </ul> </nav> <Routes> <Route path="/user" element={<User />} /> <Route path="/user/:name" element={<UserDetails />} /> </Routes> </Router> ); } export default App; ``` 当在输入框输入用户名并点击提交按钮时,会根据输入的用户名显示相应的用户详情。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yusirxiaer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值