如何在React Router v4中获取所有参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在React Router v4中获取所有参数相关的知识,希望对你有一定的参考价值。

我试图从API获取动态路由。当URL有参数时,我会通过API请求发送它们并获取类型,并根据该类型我呈现我的视图。

我想从URL获取整个参数。 URL可以是任意数量且具有任意数量的参数。

示例网址:http://localhost:3000/type/article

App.js

<Route path="/:view" component={LayoutPage} />

布局页面

componentDidMount() {
    this.doLoadView(this.props.match.params);
  }
  doLoadView(url) {
    this.setState({ url: url});
    console.log(url, 'match.params.view');
    this.props.actionLoad(url);
  }

在match.params.view上,它给出了'type'。我知道因为我在app.js中定义了/:view所以输出只是第一个参数。但我想要完整的参数,即'type / article'。

答案

React路由器无法正常工作。你设置了一个你需要的参数的路线,然后'this.props.match.params'为你获取所有的参数。

如果您设置这样的路线:

<Route path="/:view" component={LayoutPage} />

你只定义了一个参数,所以即使你打电话:

http://localhost:3000/type/article/myotherparam/andanotherparam/etc/etc2

您将只获得type,因为Route只期望第一个参数(定义为:view)。

如果要定义多个参数,请执行以下操作:

<Route path="/:view/:param2/:param3" component={LayoutPage} />

这样你可以确保你有3个参数。

正则表达式和处理未知数量的参数

现在,因为我想你不知道会有多少个参数,你可以使用正则表达式匹配所有参数,但之后需要进行一些解析。

因此,您可以将路线定义为:

<Route path="/:view+" component={LayoutPage} />

像这样称呼它:

http://localhost:3000/type/article/myotherparam/andanotherparam/etc/etc2

然后如果你记录:

console.log(JSON.stringify(this.props.match.params));

你会得到:

{"view":"type/article/myotherparam/andanotherparam/etc/etc2"} 

然后你可以通过/拆分:

this.props.match.params.view.split('/')

你会得到一系列参数:

["type","article","myotherparam","andanotherparam","etc","etc2"]

以上是关于如何在React Router v4中获取所有参数的主要内容,如果未能解决你的问题,请参考以下文章

React Router v4 路由参数不渲染/刷新

在 react-router V4 中,如何以编程方式设置查询字符串参数?

如何在 react-router v4 的根路由上设置可选参数?

无法使用 react-router v4 获取“/About”(生产帮助)

React Router V4 获取当前路径

在 React-Router V4 中以编程方式设置路由参数最终会出现“找不到页面”