react-router - react 路由器,匹配通配符作为参数

标签 react-router url-routing wildcard

我有一个正在被 React 替换的旧版 Web 应用程序,它被这些各种系统通过传递一个 URL(派生自和现有数据库系统中的记录)调用该应用程序呈现文件夹 View ,沙盒容器中的文件根据路径传入。

我需要能够识别这些请求并将它们路由到文件/文件夹处理页面,将路径的 '/files/部分之后的所有内容视为文件或文件夹路径的参数。

<Route path="/" handler={Master}>
  <Route name="files_link" path="files" handler={Files} />
  <Route name="filesWithPath_link" path="files/*:path" handler={Files} />
</Route>

我希望能够处理传入的请求
/files  

并在页面中处理它(默认为顶级文件夹,因为没有传递路径参数。

并将以下所有可能的 URL 示例传递给路由器,并从/files/之后的位中提取路径参数。
/files/folder                                 path=folder
/files/folder/filename.ext                    path=folder/filename.ext
/files/folder/folder1                         path=folder/folder1
/files/folder/folder1/filename.ext            path=folder/folder1/filename.ext
/files/folder/folder1/folder2/                path=folder/folder1/folder2
/files/folder/folder1/folder2/filename.ext    path=folder/folder1/folder2/filename.ext

.... and so on ...

当我尝试这个时,我收到一个错误
Uncaught Invariant Violation: Missing "splat" parameter for path "/beta/page/files/*:path"

我目前正在使用 react 0.14.2 和 react-router 0.13.4.

您将如何在 React-router 中以这种方式处理可变长度路径?

最佳答案

你需要像这样使用它:

<Route name="filesWithPath_link" path="files/*" handler={Files} />

然后在你的 React 组件中,你可以访问 splat 的值:
    // The '*' in the path match gets assigned to this.props.params.splat
    var path = this.props.params.splat;

关于react-router - react 路由器,匹配通配符作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34881382/

相关文章:

php - mvc 中的 url 重定向。我想将 localhost/windshield-replacement.html 重定向到 localhost/greenvalleyaz

python - 在 Flask (Python) 中重定向到包含 'variable part' 的 URL

java - 为什么要将变量声明为通配符类型

javascript - react-router 在提供带路径的 url 时忽略嵌套路由

javascript - protected React 路由在 props 接收 Redux 状态之前重定向

javascript - $location.path 获取之前的路径

elasticsearch - 嵌套类型上的Elasticsearch通配符查询

java - 为什么这个赋值在 Java 泛型中是非法的?

reactjs - 从 hashHistory React-router-redux 中删除 queryKey

javascript - 什么时候使用 React-Router getChildRoutes?