【问题标题】:react router, match wildcard as parameter反应路由器,匹配通配符作为参数
【发布时间】:2016-01-19 16:02:00
【问题描述】:

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

我需要能够识别这些请求并将它们路由到文件/文件夹处理页面,将路径的“/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 中以这种方式处理可变长度路径?

【问题讨论】:

    标签: react-router url-routing wildcard


    【解决方案1】:

    你需要像这样使用它:

    <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? v3?
    • React Router 4.3.1 - 我得到了这个与this.props.match.params[0]合作
    • 正如path-to-regex 中提到的,您可以使用像“files/:filepath*”这样的命名参数
    【解决方案2】:

    为了完整起见,splat 参数可以从useParams() 钩子作为属性0 访问:

    const splat = useParams()[0];
    

    【讨论】:

    • 我收到Property '0' does not exist on type '{}'
    • @frazras 你的路由标签是什么样子的?您是否正在访问位于路由内的组件中的钩子?
    猜你喜欢
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2017-07-10
    • 1970-01-01
    • 2017-10-27
    • 2017-08-06
    相关资源
    最近更新 更多