react-module이 하위 구성 요소에서 이.module.location을 가져옵니다.
제가 알기로는<Route path="/" component={App} />
의지는 준다App
같은 라우팅 관련 소품location
그리고.params
만약 나의App
컴포넌트에는 다수의 중첩된 자 컴포넌트가 있습니다.자 컴포넌트가 다음 없이 이들 소품에 액세스하려면 어떻게 해야 합니까?
- 앱에서 소품 전달
- 창 개체 사용
- 중첩된 하위 구성요소에 대한 경로 생성
내 생각에는 말이지…this.context.router
루트에 관한 정보가 몇 가지 있습니다만,this.context.router
루트를 조작하는 기능은 몇 가지밖에 없는 것 같습니다.
V6
컴포넌트에서 및 을 사용하여및 을 취득할 수 있습니다.
const Child = () => {
const location = useLocation();
const navigate = useNavigate();
const match = useMatch("write-the-url-you-want-to-match-here");
return (
<div>{location.pathname}</div>
)
}
export default Child
V5.1 및 훅 (반응 필요 > = 16.8)
컴포넌트에서 및 을 사용하여및 을 취득할 수 있습니다.
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
및 컴포넌트 소품에는 HOC를 사용하여 주입할 수 있습니다.
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
HOC를 사용하여 컴포넌트 소품에 , , 를 삽입할 수 있습니다.
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
}
위의 솔루션이 효과가 없을 경우import { withRouter } from 'react-router-dom';
이를 사용하여 자식 클래스를 다음과 같이 내보낼 수 있습니다.
class MyApp extends Component{
// your code
}
export default withRouter(MyApp);
그리고 Router와 함께 하는 당신의 클래스 -
// your code
<Router>
...
<Route path="/myapp" component={MyApp} />
// or if you are sending additional fields
<Route path="/myapp" component={() =><MyApp process={...} />} />
<Router>
언급URL : https://stackoverflow.com/questions/37516919/react-router-getting-this-props-location-in-child-components
'programing' 카테고리의 다른 글
각도에서 jquery 대화상자를 여는 가장 좋은 방법은 무엇입니까? (0) | 2023.03.09 |
---|---|
창 innerWidth의 AngularJS 이벤트 크기 변경 (0) | 2023.03.09 |
Angular 형식의 동적 유효성 검사 및 이름JS (0) | 2023.03.09 |
Azure Cli 구독 기본값을 변경하는 방법 (0) | 2023.03.09 |
Woocommerce 3에서 카트 품목 가격 변경 (0) | 2023.03.09 |