You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在react-router-dom v6中设置动态URL参数为变量值

解决react-router-dom v6动态路由URL替换问题

你的核心问题是Link组件的to属性写法错误,直接把路由占位符:persID写进路径里,导致URL没有被替换成实际变量值。下面是具体的修正方案和相关思路:

1. 修正Link的跳转路径

从Context获取到persID后,直接用模板字符串将变量插入到路径中,而非保留占位符:persID:

// App.js 中的 Link 组件
import { Link } from 'react-router-dom';
import { useContext } from 'react';
import { YourContext } from './YourContext';

function App() {
  const { persID } = useContext(YourContext);

  return (
    <Link to={`/schedule/mySchedule/${persID}`}>我的日程</Link>
  );
}

当persID为2时,生成的URL就是/schedule/mySchedule/2,完全符合需求。

2. 确认Route配置正确性

你当前的Route配置是正确的,无需修改:

// 路由配置部分
import { Routes, Route } from 'react-router-dom';
import MySchedule from './MySchedule';

function AppRoutes() {
  return (
    <Routes>
      <Route path="/schedule/mySchedule/:persID" element={<MySchedule />} />
    </Routes>
  );
}

3. 在MySchedule组件中获取参数

如果需要在MySchedule组件中拿到URL里的persID值,使用useParams钩子即可:

// MySchedule.js
import { useParams } from 'react-router-dom';

function MySchedule() {
  const { persID } = useParams();
  // 此处的 persID 就是URL中的实际值,比如2
  return <div>当前用户ID:{persID}</div>;
}

4. 编程式导航的替代方案

如果需要通过按钮点击等事件手动触发跳转(而非使用Link),react-router-dom v6已移除useHistory,改用useNavigate钩子:

// 编程式跳转示例
import { useNavigate } from 'react-router-dom';
import { useContext } from 'react';
import { YourContext } from './YourContext';

function SomeComponent() {
  const { persID } = useContext(YourContext);
  const navigate = useNavigate();

  const handleJump = () => {
    navigate(`/schedule/mySchedule/${persID}`);
  };

  return <button onClick={handleJump}>跳转到我的日程</button>;
}

手动替换路径的思路

如果一定要手动替换占位符(不推荐,模板字符串更简洁直观),可以用字符串替换方法:

const basePath = "/schedule/mySchedule/:persID";
const actualPath = basePath.replace(':persID', persID);
// 当persID为2时,actualPath就是"/schedule/mySchedule/2"

内容的提问来源于stack exchange,提问作者user20412483

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:01:08