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

React Router Dom路由跳转异常:如何避免相对路径嵌套跳转

React Router useNavigate 跳转路径异常问题解决

问题描述

开发了一个基于path属性实现页面跳转的React按钮组件ButtonShift,使用useNavigate进行路由跳转。首页点击按钮可通过/about正常跳转到About页面;但在About页面点击按钮时,路由会跳转到/about/path而非预期的/path。

相关代码

按钮组件代码

interface Props {
  path: string;
  text: string;
}
const ButtonShift = ({ path, text }: Props) => {
  let navigate = useNavigate();
  const routeChange = () => {
    navigate(path);
  };
  return (
    <button className="btn btn-primary" onClick={routeChange}>
      {text}
    </button>
  );
};

export default ButtonShift;

路由配置代码

<BrowserRouter>
  <Routes>
    <Route index element={<Home />}></Route>
    <Route path="/home" element={<Home />}></Route>
    <Route path="/about" element={<About />}></Route>
    <Route path="/projects" element={<Projects />}></Route>
  </Routes>
</BrowserRouter>

问题原因

React Router的useNavigate在处理路径时,若传入的是相对路径(不以/开头),会基于当前页面的路由路径进行拼接。比如当前在/about页面,传入projects就会拼接成/about/projects;只有传入绝对路径(以/开头),才会从根路由开始跳转,不受当前页面路由影响。

解决方法

方法1:传入绝对路径参数

使用组件时,确保path属性始终以/开头:

// 正确写法
<ButtonShift path="/projects" text="跳转到项目页" />

// 错误写法(会导致相对路径拼接)
<ButtonShift path="projects" text="跳转到项目页" />

方法2:组件内部强制转换为绝对路径

如果无法保证传入的path都是绝对路径,可以在组件内部自动处理:

const ButtonShift = ({ path, text }: Props) => {
  let navigate = useNavigate();
  const routeChange = () => {
    // 确保路径以/开头,转为绝对路径
    const absolutePath = path.startsWith('/') ? path : `/${path}`;
    navigate(absolutePath);
  };
  return (
    <button className="btn btn-primary" onClick={routeChange}>
      {text}
    </button>
  );
};

这样无论传入的是相对路径还是绝对路径,都会统一转为绝对路径跳转,避免出现路径拼接错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:05:10