在反应路由器v4中定义路由时,在匹配参数中定义“包含”逻辑

时间:2017-11-21 12:19:37

标签: javascript reactjs react-router

当路径包含某事时,是否有一种方法(或者什么是最好的方式,如果存在的话)告诉反应路由器(v4)包含组件?

示例:

假设模式为/users/:id,所有休闲路线应匹配:

  • /users/111
  • home/users/111
  • article/123/users/111
  • /users/111/article/123
  • home/users/111/article/123

编辑:规则应动态应用,即无需枚举所有可能的路线:/.*\/users\/:id.*/

1 个答案:

答案 0 :(得分:0)

我假设您正在使用开关?

如果你不使用确切的

<Route path="/" component={Home}/>

然后每个路径都会返回此路径,如果你这样做

<Route exact path="/" component={Home}/>

只保留路径名为空将返回此路由。

如果你想让几个路径名返回相同的路径,你可以使用多个Route s,有/无精确,无论你喜欢什么。

类似的东西:

<Router history={history}>
    <Switch>
        <Route exact path="/" component={Home}/>
        <Route exact path="/:id" component={Home}/>
        <Route path="/:id/article" component={Home}/>
    </Switch>
</Router>

如果路径名为空,则返回Home,123,123 / article或123 / article /“无论你放在这里”。

如果这不符合您的需求,您可以创建一个解决方法,在Switch的末尾放置一个始终返回Home的Route,当它执行时,传递所需的匹配。然后,您可以使用Home组件插入自己的逻辑。

const PageRouter = ({match}) => {
    if (match.params.someParameter !== "legit") {
        history.replace("/not-found");
    }
    return <HomePage/>
};