Nesting Routes in react-router v4

早过忘川 提交于 2019-11-26 02:58:48

问题


I\'ve upgraded the react router to version 4 in my application. But now I\'m getting the error

Warning: You should not use <Route component> and <Route children> in the same route; <Route children> will be ignored

What is wrong with this routing?

import {
    Switch,
    BrowserRouter as Router,
    Route, IndexRoute, Redirect,
    browserHistory
} from \'react-router-dom\'   

render((
    <Router history={ browserHistory }>
        <Switch>
            <Route path=\'/\' component={ Main }>
                <IndexRoute component={ Search } />
                <Route path=\'cars/:id\' component={ Cars } />
                <Route path=\'vegetables/:id\' component={ Vegetables } />
            </Route>
            <Redirect from=\'*\' to=\'/\' />
        </Switch>
    </Router>
), document.getElementById(\'main\'))

回答1:


IndexRoute and browserHistory are not available in the latest version, also Routes do not accept children Routes with v4, Instead, you can specify Routes within the component Itself

import {
    Switch,
    BrowserRouter as Router,
    Route,  Redirect
} from 'react-router-dom'   

render((
    <Router>
        <Switch>
            <Route exact path='/' component={ Main }/>

            <Redirect from='*' to='/' />
        </Switch>
    </Router>
), document.getElementById('main'))

Then in the Main Component

render() {
     const {match} = this.props;
     return (
        <div>
           {/* other things*/}
           <Route exact path="/" component={ Search } />
           <Route path={`${match.path}cars/:id`} component={ Cars } />
         </div>
    )

}

Similarly in the cars component

you will have

render() {
     const {match} = this.props;
     return (
        <div>
           {/* other things*/}
           <Route path={`${match.path}/vegetables/:id`} component={ Vegetables } />
        </div>
    )

}



回答2:


Nested routes are not available from version react-router 4.x. Here is a basic example straight from react-router documentation on how to code for nesting route secnarios in v4.x.

Also have a look on this question as well Why can I not nest Route components in react-router 4.x?



来源:https://stackoverflow.com/questions/44452858/nesting-routes-in-react-router-v4

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!