允许在 React 的路由参数中使用斜杠

Allow slashes in route parameter on React

我有这样的路由器:

<Route path="/blog/:date/:folder" render={(props: any) => <Home />

适用于此:

http://localhost/blog/2017-05-20/test

但是,:folder 可以有斜杠(子目录),我想一次解析文件夹中的所有路径。

工作:

http://localhost/blog/2017-05-20/test/sub/dir

在这种情况下,我只得到test。我想把 :folder 作为一个整体 test/sub/dir

有什么方法可以用 React Router 实现吗?

预期:

:date => '2017-05-20'
:folder => 'test/sub/dir'

实际:

:date => '2017-05-20'
:folder => 'test'

如果组件由路由呈现,您可以递归地嵌入组件 - 然后您可以检查 this.props.match 路径名称,例如,在您的基本路由器中,您将拥有基本路由,/blog/:date,它呈现一个 Home 组件。

然后在 Home 组件中,您可以渲染另一个 Route(它仍然可以从这里开始工作,尽管它不是 Router 的直接子级),设置如下

<Route path={`${this.props.match.url}/:folder`} component={Folder} />

然后在 Folder 组件中,您将呈现相同的 Route,它将为路径中的每个 /:folder 逐步呈现 sub-components。

match 对象还包括 isExact,您可以使用它来确定您是否位于 URL.

文件夹结构的最后一层

来源:参见 this example 嵌入路由。

是的,您可以通过在路线路径中添加 + 来实现。所以,像这样:

<Route path="/blog/:date/:folder+" ... />

This library 用于匹配路径。因此,对于更高级的匹配案例,这是一个比 React Router 文档更好的地方。