如何在URL匹配类型中传递params?
例如,我/profile/:id
允许我转到/profile/1
但问题是我也可以通过/profile/1qwr/
而我什么也得不到
如何检查类型?并显示错误或其他?
使用typescript和react-router。
答案 0 :(得分:3)
一个。你不能在路线的参数上设置类型检查。
B中。如果你想显示一些错误 - 通过获取像这样this.props.params.id
的参数在你的渲染方法中处理它。但即使在这里你也无法区分类型,因为你总会得到字符串。
您可以尝试使用parseInt
并检查转化是否成功,然后确定该怎么做。
答案 1 :(得分:1)
其他提到的答案之一效率低下,另一个已经过时。
我认为最好的解决方案是通过编写一个简单的正则表达式在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使用,因此不需要安装任何东西。
答案 2 :(得分:0)
我想到的快速黑客:
在componentWillMount()
中(或在纯组件的渲染功能中,但这可能是一个更糟糕的想法),您可以引用与this.props.match.url
一起传递的URL。
您可以对字符串进行切片以消除/
,然后将网址传递给正则表达式或类似parseInt()
的函数进行准类型检查。
然后你需要做的就是从react-router
提取Redirect component并有条件地将其关闭(如果它不属于类型,可能会发送给你的404页面你允许。)。