在 react-router 中设置参数类型

Posted

技术标签:

【中文标题】在 react-router 中设置参数类型【英文标题】:Set type of params in react-router 【发布时间】:2017-07-25 08:33:18 【问题描述】:

如何传递URL匹配类型的参数?

例如,我有/profile/:id,它允许我去/profile/1

但问题是我也可以通过/profile/1qwr/ 去,但我什么也得不到。

如何检查URL参数的类型并显示错误或其他?

【问题讨论】:

如何获取个人资料?通过向数据库发出某种带有 id 的请求? 【参考方案1】:

A.您不能对路由的参数设置类型检查。

B.如果你想显示一些错误 - 在你的渲染方法中通过获取像这样的参数来处理它this.props.params.id。但即使在这里你也无法区分类型,因为你总是会得到字符串。

您可以尝试使用parseInt 并检查转换是否成功,然后确定如何操作。

【讨论】:

【参考方案2】:

我刚刚想到的快速破解:

componentWillMount() 中(或在纯组件的渲染函数中,但这可能是一个更糟糕的主意),您可以引用使用this.props.match.url 传递的URL。

您可以对字符串进行切片以消除 /,然后将 url 传递给正则表达式或 parseInt() 之类的函数以进行准类型检查。

然后,您需要做的就是从 react-router 中拉入 Redirect component 并有条件地关闭它(如果它不是您允许的类型,可能会将其发送到您的 404 页面。)。

【讨论】:

componentWillMount 将被弃用。 reactjs.org/blog/2018/03/27/update-on-async-rendering.html【参考方案3】:

其他答案已过时。

在我看来,最好的解决方案是通过编写一个简单的正则表达式在id 参数上设置一个type

如果您希望 id 仅接受整数,您将执行以下操作:

/profile/:id(\\d+)

/* the `(\\d+)` is a regular expression that will only accept integers */

path-to-regex 文档中了解更多信息。 path-to-regex是react-router内部使用的,所以不需要安装任何东西。

【讨论】:

这是正确的。作为附录,如果您的参数是可选的,您可以像这样使用它:/profile/:id(\\d+)?'/profile/1' = id: 1 '/profile/two' = '/profile' =

以上是关于在 react-router 中设置参数类型的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 react-router 中设置基本路由吗

如何在 react-router v4 中设置活动链接的样式?

如何在 PEP484 之后的方法参数中设置与类相同的类型? [复制]

请教如何在Report Builder 中设置多个参数

React全家桶之一 react-router之高级

如何在 Jenkins 声明式管道中设置声纳扫描仪