Reactjs 保留部分路径的同时响应路由器声明性重定向
我最近不得不在我的应用程序中更改一个路径,但我想通过重定向来保持旧深度链接的有效性。以下是更改路径的示例: 原件:Reactjs 保留部分路径的同时响应路由器声明性重定向,reactjs,react-router,Reactjs,React Router,我最近不得不在我的应用程序中更改一个路径,但我想通过重定向来保持旧深度链接的有效性。以下是更改路径的示例: 原件:/foo/users/12345 更新:/bar/users/12345 我尝试使用重定向来实现这一点: <Route path='/bar' component={MyComponent} /> <Route path='/foo'> <Redirect to='/bar' /> </Route> 但是,请求的后一部分在重定
/foo/users/12345
更新:/bar/users/12345
我尝试使用重定向来实现这一点:
<Route path='/bar' component={MyComponent} />
<Route path='/foo'>
<Redirect to='/bar' />
</Route>
但是,请求的后一部分在重定向中丢失。因此,对/foo/users/12345
的请求会重定向到/bar
是否有一种声明性的方式在重定向中传递路径的
/users/12345
部分?如果在路径中放置正则表达式怎么办
<Route path='/(bar|foo)/' component={MyComponent} />
正如所回答的那样,我正在查看文档,没有找到您在问题中所解释的这个场景的现成解决方案
我没有尝试使用重定向
,而是构建了一个功能组件,该组件已设置为原始路由的组件。这有助于重定向,并可用于此目的,如下所示:
<Route path='/foo/:users?/:id?' component={RedirectHelper}/>
<Route path='/bar/:users?/:id?' component={MyComponent}/>
因此,从技术上讲,RedirectHelper
组件从原始~foo/users/12345
URL的history.location.pathname
属性中提取值,并构建新的URL。最后,它只是重定向到~bar/users/12345
URL。原始版本的有效性已保留。我已经测试了这个解决方案,并且工作得很有魅力
希望这有帮助 我不明白你的问题。你能重新措辞吗?是否要更改url中的路径,但为不同的路径呈现特定组件?不,我基本上希望将/foo*
重定向到/bar*
,其中保留与splat匹配的部分。有趣的。。。这正是我所希望的。你能解释一下为什么我需要返回一个空div吗?我注意到,如果返回未定义,它将使新路径段加倍,并且无法正常工作。@djfdevRedirectHelper
仍然是一个需要返回有效HTML或null
的组件。这个解决方案只是一个让您的需求工作的变通方法。好的,让我更新到null
,我更喜欢那个。我用null
值做了额外的测试,同样有效。如果解决方案有效并回答了您的问题,请随意接受作为答案,谢谢。
const RedirectHelper = (props) => {
const {history} = props;
const path = history.location.pathname.replace('/foo', '');
history.push(`/bar${path}`);
return null;
}