React Router - how to constrain params in route matching?

后端 未结 2 1967
暖寄归人
暖寄归人 2021-02-01 02:02

I don\'t really get how to constrain params with, for example a regex.
How to differentiate these two routes?

  
    

        
相关标签:
2条回答
  • 2021-02-01 02:35

    React-router v4 now allows you to use regexes to match params -- https://reacttraining.com/react-router/web/api/Route/path-string

    const NumberRoute = () => <div>Number Route</div>;
    const StringRoute = () => <div>String Route</div>;
    
    <Router>
        <Switch>
            <Route exact path="/foo/:id(\\d+)" component={NumberRoute}/>
            <Route exact path="/foo/:path(\\w+)" component={StringRoute}/>
        </Switch>
    </Router>
    

    More info: https://github.com/pillarjs/path-to-regexp/tree/v1.7.0#custom-match-parameters

    0 讨论(0)
  • 2021-02-01 02:36

    I'm not sure if this is possible with React router at the moment. However there's a simple solution to your problem. Just do the int/alpha check in another component, like this:

    <Router>
        <Route path="/:index" component={Child0} />
    </Router>
    
    const Child0 = (props) => {
        let n = props.params.index;
        if (!isNumeric(n)) {
            return <Child1 />;
        } else {
            return <Child2 />;
        }
    }
    

    * Note that the code above does not run, it's just there to show what I mean.

    0 讨论(0)
提交回复
热议问题