(Оновлення) V5.1 і хуки (Потрібна реакція> = 16,8)
Ви можете використовувати useHistory
, useLocation
а useRouteMatch
у вашому компоненті отримати match
, history
і location
.
const Child = () => {
const location = useLocation();
const history = useHistory();
const match = useRouteMatch("write-the-url-you-want-to-match-here");
return (
<div>{location.pathname}</div>
)
}
export default Child
(Оновлення) V4 і V5
Ви можете використовувати withRouter
HOC для того , щоб ввести match
, history
і location
в ваших компонентів реквізиту.
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)
(Оновлення) V3
Ви можете використовувати withRouter
HOC для того , щоб ввести router
, params
, location
, routes
в ваших компонентів реквізиту.
class Child extends React.Component {
render() {
const { router, params, location, routes } = this.props
return (
<div>{location.pathname}</div>
)
}
}
export default withRouter(Child)
Оригінальна відповідь
Якщо ви не хочете використовувати реквізит, ви можете використовувати контекст, як описано в документації React Router
По-перше, ви повинні налаштувати свій childContextTypes
іgetChildContext
class App extends React.Component{
getChildContext() {
return {
location: this.props.location
}
}
render() {
return <Child/>;
}
}
App.childContextTypes = {
location: React.PropTypes.object
}
Тоді ви зможете отримати доступ до об'єкта розташування у ваших дочірніх компонентах, використовуючи такий контекст
class Child extends React.Component{
render() {
return (
<div>{this.context.location.pathname}</div>
)
}
}
Child.contextTypes = {
location: React.PropTypes.object
}