我使用的是React Router v4,我的客户想要一个特殊的功能,即添加' /注册'在现有页面的网址末尾会出现一个注册覆盖图,要求提供访问者的联系信息。在覆盖图中填写表单后,访问者将被重定向到原始URL的内容。如果一个精明的访问者通过删除' /注册'来解决这个问题,那就好了 URL。
我的问题是:我该如何做到这一点?我是否应该使用路径道具来检查网址?
我预见的一个问题是我无法预测所有潜在的网址和结构。我需要能够获取任何可以嵌套到N度的任意URL。以下是出现叠加层的情况:
app.directive(…).directive(…).directive(…).directive(…).directive(…)
我试着查看是否在params中使用regexp是我问题的解决方案,但我认为不是,因为正则表达式似乎只检查了一个特定的参数,并且没有解决最初讨论的URL中任意数量的正斜杠的问题(即不同程度嵌套的路径)。见下文:
<Route path="/home/signup" render={({match}) => (
<SomeOverlayForm />
)}>
<Route path="/home/xx/signup" render={({match}) => (
<SomeOverlayForm />
)}>
<Route path="/home/xx/yy/signup" render={({match}) => (
<SomeOverlayForm />
)}>
<Route path="/other/signup" render={({match}) => (
<SomeOverlayForm />
)}>
我很困惑。因此,不仅要指导技术解决方案,还要考虑如何考虑问题/要求。我也愿意稍微修改一下实现。例如,我可以使用&#39;?signup = true&#39;而不是&#39; /注册&#39;。但是要将该东西放在URL的 end 的要求保持不变。
答案 0 :(得分:1)
您可以使用:params*
。这意味着zero or more
。
例如:
<Route path="/home/:pageNo*/signup" component={Overlay} />
它将匹配这些路径:
// match.params.pageNo contains ""
/home/signup
// match.params.pageNo contains "1"
/home/1/signup
// match.params.pageNo contains "1/2"
/home/1/2/signup
// match.params.pageNo contains "1/2/3"
/home/1/2/3/signup