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

React Router(v5.3.4)嵌套组件URL重定向异常求助

解决React Router v5.3.4中URL拼接错误的问题

问题出在你使用了相对路径作为Link的to属性值,React Router会基于当前页面的路由路径去拼接新路径,导致URL层级错误。

核心解决方案:使用绝对路径

把Link的to值改为以/开头的绝对路径,这样路由会从根路径开始匹配,不会基于当前路径拼接:

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

const Product = ({ product }) => {
  return (
    <Link to={`/product/${product.id}`}>
      {/* Product content */}
    </Link>
  );
};

export default Product;

为什么之前的写法不行?

  • 当你写to={product/${product.id}}时,当前页面路径是/product/34,React Router会把新路径拼接为/product/34/product/35
  • 改成to={${product.id}}后,新路径会被拼接为/product/34/35,本质还是相对当前路径的子路径,不是替换掉原有的商品ID参数

如果用路由跳转钩子(v5对应useHistory)

注意v5中没有useNavigate,对应的是useHistory钩子,同样要使用绝对路径:

import React from 'react';
import { useHistory } from 'react-router-dom';

const Product = ({ product }) => {
  const history = useHistory();

  const handleClick = () => {
    history.push(`/product/${product.id}`);
  };

  return (
    <div onClick={handleClick}>
      {/* Product content */}
    </div>
  );
};

export default Product;

额外验证点

确认你的路由配置中存在正确的动态路由:

// App.js 或路由配置文件
import { BrowserRouter as Router, Route } from 'react-router-dom';
import ProductPage from './ProductPage';

function App() {
  return (
    <Router>
      <Route path="/product/:id" component={ProductPage} />
      {/* 其他路由 */}
    </Router>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:52:41