Si j'ai bien compris, <Route path="/" component={App} />
donnera App
accessoires liés au routage comme location
et params
. Si mon composant App
comporte de nombreux composants enfants imbriqués, comment puis-je obtenir que le composant enfant ait accès à ces accessoires sans:
Je pensais que this.context.router
aurait des informations relatives aux routes, mais this.context.router
ne semble avoir que quelques fonctions pour manipuler les routes.
(Mise à jour) V4 & V5
Vous pouvez utiliser withRouter
HOC pour injecter match
, history
et location
dans les accessoires de votre composant.
class Child extends React.Component {
static propTypes = {
match: PropTypes.object.isRequired,
location: PropTypes.object.isRequired,
history: PropTypes.object.isRequired
}
render() {
const { match, location, history } = this.props
return (
<div>{location.pathname}</div>
)
}
}
export default withRouter(Child)
(Mise à jour) V3
Vous pouvez utiliser withRouter
HOC pour injecter router
, params
, location
, routes
dans les accessoires de votre composant.
class Child extends React.Component {
render() {
const { router, params, location, routes } = this.props
return (
<div>{location.pathname}</div>
)
}
}
export default withRouter(Child)
Réponse originale
Si vous ne souhaitez pas utiliser les accessoires, vous pouvez utiliser le contexte comme décrit dans la documentation de React Router .
Tout d’abord, vous devez configurer vos childContextTypes
et getChildContext
class App extends React.Component{
getChildContext() {
return {
location: this.props.location
}
}
render() {
return <Child/>;
}
}
App.childContextTypes = {
location: React.PropTypes.object
}
Ensuite, vous pourrez accéder à l'objet location dans vos composants enfants en utilisant le contexte comme ceci
class Child extends React.Component{
render() {
return (
<div>{this.context.location.pathname}</div>
)
}
}
Child.contextTypes = {
location: React.PropTypes.object
}