react-router <Route /> 组件的url参数可以验证吗?

Posted

技术标签:

【中文标题】react-router <Route /> 组件的url参数可以验证吗?【英文标题】:Can the url params of the react-router <Route /> component be validated? 【发布时间】:2016-10-23 10:27:25 【问题描述】:

我正在使用 react-router (2.4.1),并且我有一个通配符 (path="*") 后备路由来显示“未找到”组件。

我的一条路线定义如下:

<Route path="/campaigns/:category" component=CampaignsPage />

我能否以任何方式验证 category 路由参数以检查此类别是否存在于我的类别列表中?如果没有,我希望路由器下降到通配符以显示 Not Found 组件

【问题讨论】:

我在他们的 github 问题中看到了使用 url-matcher 的建议:github.com/reactjs/react-router/issues/… 目前似乎只有“hacky”的方式来实现这一点。 react-router 开发人员提到,这可能会在不久的将来实现。 【参考方案1】:

也许您可以验证“活动”组件中收到的参数?大致如下:

class CampaignsPage extends Component 
    render() 
        const validCampaignCats = [...]
        const receivedCampaignCat = this.props.params.category

        const renderChild = (actualCat, validCats) => 
            if (!validCats.includes(actualCat)) 
                return <YourErrorPage/>
            
            return this.props.children
        

        return (
            <div>
                <Header/>
                 renderChild(receivedCampaignCat, validCampaignCats) 
                <Footer/>
            </div>
        )
    

希望有帮助!

【讨论】:

以上是关于react-router <Route /> 组件的url参数可以验证吗?的主要内容,如果未能解决你的问题,请参考以下文章

React-Router V4 - <Match> 和 <Route> 之间的区别

如何使用 react-route 链接刷新页面

react-router中获取某个Route的路径

React-Route的属性exact

react-route动态路由,它的子路由路径配置在啥地方

使用带有打字稿的 react-router