J'ai mis à niveau le routeur de réaction à la version 4 dans mon application. Mais maintenant je reçois l'erreur
Warning: You should not use <Route component> and <Route children> in the same route; <Route children> will be ignored
Quel est le problème avec ce routage?
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'))
IndexRoute et browserHistory ne sont pas disponibles dans la dernière version, et Routes n'acceptent pas les enfants Routes avec v4. Vous pouvez plutôt spécifier des routes dans le composant lui-même.
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'))
Puis dans la composante principale
render() {
const {match} = this.props;
return (
<div>
{/* other things*/}
<Route exact path="/" component={ Search } />
<Route path={`${match.path}cars/:id`} component={ Cars } />
</div>
)
}
De même dans le composant voitures
tu vas avoir
render() {
const {match} = this.props;
return (
<div>
{/* other things*/}
<Route path={`${match.path}/vegetables/:id`} component={ Vegetables } />
</div>
)
}
Les routes imbriquées ne sont pas disponibles à partir de la version react-router 4.x. Voici un exemple de base directement à partir de react-router documentation sur la manière de coder pour une imbrication de route secondaire dans la version 4.x.
Consultez également cette question Pourquoi ne puis-je pas imbriquer les composants Route dans react-router 4.x?