如何在URL匹配类型中传递参数?例如,我有/profile/:id,它允许我去/profile/1。但问题是,我也可以用/profile/1qwr/,但我什么也得不到。如何检查URL参数的类型并显示错误或其他内容?
/profile/:id
/profile/1
/profile/1qwr/
pepwfjgg1#
注意:此答案自v6起已过时:See discussion on Github(感谢@dan指出这一点)。原始答案:
在我看来,最好的解决方案是通过编写一个简单的正则表达式在id参数上设置一个 type。如果希望id只接受整数,可以这样做:
id
/profile/:id(\\d+) /* the `(\\d+)` is a regular expression that will only accept integers */
请在path-to-regex文档中阅读更多相关信息。path-to-regex由react-router内部使用,因此无需安装任何内容。
path-to-regex
dgiusagp2#
答:不能对路由的参数设置类型检查。B.如果你想显示一些错误--在你的render方法中处理它,方法是获取像this.props.params.id这样的参数。但是即使在这里,你也不能区分类型,因为你总是会得到字符串。您可以尝试使用parseInt并检查转换是否成功,然后确定要执行的操作。
this.props.params.id
parseInt
5kgi1eie3#
快速的破解我这才想到:在componentWillMount()中(或者在Pure Component的render函数中,但这可能是一个更糟糕的主意),您可以引用使用this.props.match.url传递的URL。您可以对字符串进行切片以消除/,然后将url传递给regex或parseInt()之类的函数进行准类型检查。然后,您需要做的就是从react-router中拉入Redirect component,并有条件地将其关闭(如果它不是您允许的类型,可能会将您的404页面发送给它)。
componentWillMount()
this.props.match.url
/
parseInt()
react-router
3条答案
按热度按时间pepwfjgg1#
注意:此答案自v6起已过时:See discussion on Github(感谢@dan指出这一点)。
原始答案:
在我看来,最好的解决方案是通过编写一个简单的正则表达式在
id
参数上设置一个 type。如果希望id只接受整数,可以这样做:
请在
path-to-regex
文档中阅读更多相关信息。path-to-regex
由react-router内部使用,因此无需安装任何内容。dgiusagp2#
答:不能对路由的参数设置类型检查。
B.如果你想显示一些错误--在你的render方法中处理它,方法是获取像
this.props.params.id
这样的参数。但是即使在这里,你也不能区分类型,因为你总是会得到字符串。您可以尝试使用
parseInt
并检查转换是否成功,然后确定要执行的操作。5kgi1eie3#
快速的破解我这才想到:
在
componentWillMount()
中(或者在Pure Component的render函数中,但这可能是一个更糟糕的主意),您可以引用使用this.props.match.url
传递的URL。您可以对字符串进行切片以消除
/
,然后将url传递给regex或parseInt()
之类的函数进行准类型检查。然后,您需要做的就是从
react-router
中拉入Redirect component,并有条件地将其关闭(如果它不是您允许的类型,可能会将您的404页面发送给它)。