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

React Router DOM v6中匹配动态首路由时重定向至指定路由的方法

解决React Router动态参数重定向失效问题

你当前的问题是:使用<Navigate to="/:productId/productInfo" replace />时,React Router不会自动解析:productId这个动态参数,而是把它当作字符串字面量处理,导致重定向后的路径变成http://localhost:3000/:productId/productInfo,而非实际的产品ID路径。

修复方案

需要通过useParams钩子获取当前路由的动态参数,再拼接成正确的重定向路径:

修改后的完整代码

import React from "react";
import { Route, Routes, Navigate, useParams } from "react-router-dom";
import ProductDescription from "./ProductDescription";

// 自定义组件获取动态参数并执行重定向
const RedirectToProductInfo = () => {
  const { productId } = useParams();
  return <Navigate to={`/${productId}/productInfo`} replace />;
};

const UserRoutes = () => {
  return (
    <Routes>
      <Route path="/:productId/productInfo" element={<ProductDescription />} />

      {/* 使用自定义组件替代硬编码的Navigate路径 */}
      <Route path="/:productId" element={<RedirectToProductInfo />} />
    </Routes>
  );
};

export default UserRoutes;

原理说明

  • useParams()会返回当前路由的动态参数对象,从中可以拿到实际的productId值。
  • 通过模板字符串/${productId}/productInfo拼接出正确的目标路径,确保重定向后路径包含真实的产品ID。
  • replace属性保留,避免在浏览器历史记录中留下原路径的无效记录。

修改后,当用户访问http://localhost:3000/123这类路径时,会自动重定向到对应产品的详情页http://localhost:3000/123/productInfo。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:57:11