2017-10-23 2 views
0

나는 the following post을 확인했습니다.하지만 내 문제를 해결하기 위해 여러 가지 해결책을 제시하지는 않습니다.React Router V4 (react-router-dom)는 프로그래밍 방식으로 트리 내에서 탐색합니다.

반응 라우터 V4를 사용하면 프로그래밍 방식으로 구성 요소에서 깊이있는 내부 트리 내 에 전달 된 라우터 소품 (기록, URL, 매개 변수 등)에 액세스 할 수 없습니다. 가장 직접적인 방법은 무엇입니까?

import history from 'path/to/history.js' 

... 
someFoo(){ 
    history.push({ 
    pathname: '/new/url', 
    }) 
} 
... 

당신은 또한 확인해야합니다 : 다른 구성 요소의

import createHistory from 'history/createBrowserHistory' 
const history = createHistory() 
export default history 

다음을 :

+0

에서 자세한 정보를 찾을 수 있습니다 this.props.history.push(newURL);를 사용하여 새로운 URL로 history 소품을 액세스하고 리디렉션 할 수 있습니다, 위의 정의? 'this.context.router.transitionTo' 또는'this.props.history.push'를 시도 할 때 오류가 발생합니까? – Scott

답변

1

모두 구성 요소가 깊이에 관계없이 history, locationmatch 소품에 액세스 할 수 있습니다 (react-router에 의해 사용됨). 이 작업을 수행하려면 react-router에 의해 제공되는 withRouter HOC의 구성 요소를 래핑해야합니다.

코드 :

//other imports 
import {withRouter} from 'react-router-dom' 

//define component MyComponent here 

export default withRouter(MyComponent); 

내부를 MyComponent 당신은 당신이 시도 무엇 https://reacttraining.com/react-router/web/api/withRouter

+0

'shouldComponentUpdate'와 관련된 옵션은 다음과 같습니다 : // // shouldComponentUpdate around withRouter (connect (...) (MyComponent)) // 이것은하지 않습니다. connect (...) (withRouter (MyComponent))'- 무엇을 위해 사용됩니까? – Mendes

+0

그 질문에 답한 @ShubhamKhatri에게 요청해야합니다. 또는 다른 질문을 게시 할 수 있습니다. :) – palsrealm

1

가장 정직 방법은 너무

history.js처럼 별도의 파일로 역사를 이동하는 것입니다 라우터에 새로운 기록을 전달하여 올바르게 작동하도록하십시오.

+0

당신은 "당신은 또한 당신의 라우터에 새로운 히스토리를 전달하여 작동하도록 만들 필요가 있습니다."나는 이것을 시도하고 히스토리는 변경되지만, II가 링크를 사용하는 것처럼 변경되지는 않습니다 ' – Leito

+0

아마도 2 개의 기록 인스턴스가 있기 때문일 것입니다. 대부분의 경우 라우터에서 같은 히스토리를 참조 할 필요가 있습니다. 예를 들어'path/to/history.js에서 가져 오기 내역 '' –

관련 문제