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

react-router v6 useParams无法动态获取路径、嵌套路由不渲染问题

问题根因

  • 路由配置逻辑冲突:App组件中同时声明了/quotes/*通配符路由和/quotes/:quoteId动态路由,且通配符路由顺序在前,所有/quotes开头的子路径会优先命中无:quoteId参数定义的通配符路由,直接导致useParams()无法读取到参数值
  • 嵌套路由路径规则使用错误:react-router v6 组件内部的嵌套路由默认基于父路由路径做相对匹配,不需要手动拼接动态参数,原写法拼接的路径不符合相对路径规则,导致子路由无法命中

修复代码

App 组件修改后代码

import { Route, Routes, Navigate } from "react-router-dom";
import AllQuotes from './pages/AllQuotes';
import QuoteDetail from './pages/QuoteDetail';

function App() {
  return (
    <div>
      <Routes>
        <Route path='/' element={<Navigate to='/quotes' />} />
        <Route path='/quotes' element={<AllQuotes />} />
        {/* 合并重复路由,末尾加*支持组件内部嵌套路由匹配 */}
        <Route path='/quotes/:quoteId/*' element={<QuoteDetail />} />
      </Routes>
    </div>
  );
}

export default App;

QuoteDetail 组件修改后代码

import { Fragment } from "react";
import { useParams } from "react-router";
import { Routes, Route } from "react-router-dom";
import Comments from "../components/comments/Comments";

const QuoteDetail = () => {
  const params = useParams();

  console.log(params.quoteId); // 可正常获取动态参数

  return (
    <Fragment>
      <h1>Quote Detail Page</h1>
      <p>{params.quoteId}</p>
      <Routes>
        {/* 直接写相对路径即可,自动继承父路由的动态参数 */}
        <Route 
          path="comments"
          element={<p>Hello</p>}
        />
      </Routes>
    </Fragment>
  );
};

export default QuoteDetail;

验证效果

访问/quotes/自定义参数时可正常打印、显示参数值,访问/quotes/自定义参数/comments时子路由内容可正常渲染。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:27:03