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

react-router-dom嵌套组件路由跳转路径追加异常求助

解决React路由嵌套跳转时路径被追加的问题

嘿,我一眼就看出问题出在哪了——你在跳转的时候用了match.url来拼接路径,这就导致了相对路径跳转,所以路径才会被追加到当前路由后面。

咱们拆解下场景:当你处于/quiz/draft路由时,match.url的值就是/quiz/draft,所以${match.url}/${uuid}最终会变成/quiz/draft/142a99fc-beb8-4de5-96c5-311cae372287,这显然不是你想要的结果。

给你几个简单直接的解决方案:

方案1:直接使用绝对路径跳转

最简单的方式就是写绝对路径,因为你的详情页路由是/quiz/:uuid,直接用/quiz/${uuid}就能精准跳转到目标页面。修改按钮的点击事件:

<button className="quiz-button edit" onClick={() => history.push(`/quiz/${uuid}`)}>EDIT</button>

方案2:基于父路由的match.path拼接(更灵活)

如果你担心以后父路由路径变化(比如把/quiz改成/quizzes),可以从QuizPage组件把父级的match.path传递给子组件,这样跳转逻辑更通用。

首先在QuizPage里传递父路径:

<Route exact path={`${match.path}/draft`} render={props => <QuizDraftCenter {...props} parentMatchPath={match.path} /> } />

然后在QuizDraftCenter里用这个父路径拼接:

<button className="quiz-button edit" onClick={() => history.push(`${parentMatchPath}/${uuid}`)}>EDIT</button>

这样就算父路由的路径调整了,子组件的跳转逻辑也不用跟着改,维护起来更省心。

方案3:用Link组件替代按钮跳转

如果业务允许,用React Router的Link组件会更符合路由的最佳实践,同样注意用绝对路径:

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

// 把按钮替换为Link组件
<Link to={`/quiz/${uuid}`} className="quiz-button edit">EDIT</Link>

这样修改后,点击按钮就能正确跳转到/quiz/142a99fc-beb8-4de5-96c5-311cae372287,不会再出现路径追加的问题啦。

内容的提问来源于stack exchange,提问作者solitude.loner7

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:22:36