1
바닐라 JS로 회사 차원의 헤더를 만들기 위해 외부 스크립트 파일을 공유하는 React 앱이 있습니다. 이 헤더에는 어떤 응용 프로그램이든 그것을 호출하는 루트에 동적으로 바인딩 된 로고가 있습니다 (location.origin
). 어떻게, 반작용 라우터 V4와React Router v4를 사용하여 React 앱 외부에서 History 인스턴스에 액세스하려면 어떻게해야합니까?
import { browserHistory } from 'react-router';
function captureLogoClick() {
const logoLink = document.querySelector('#company-header .logo a');
if(logoLink) {
logoLink.addEventListener('click', (e) => {
e.preventDefault();
browserHistory.push('/');
});
} else {
// Resource hasn't loaded yet
setTimeout(captureLogoClick, 100);
}
}
captureLogoClick();
(react-router-dom
) :
클릭 탐색을 캡처하고 사용하면 경로를 설정하는 곳마다 browserHistory에 대한 액세스가 발생하기 때문에 라우터 V3 대신, 이전에 사소한했다 반작용 구성 요소의 내부 어딘가에 리스너를 바인딩하지 않고 props.history
을 사용하여이 작업을 수행합니까?
- 그것은 역사의 소품을 받아들이는 것처럼 보이지 않는다 : -/ – jfurfaro
대안, 확인 : 그냥 사용하는 브라우저의 기본 창 .history.pushState. 히스토리 패키지가 제공하는 호환성을 원한다면'createBrowserHistory()'만 할 수 있고, 어디에서나 바인딩하거나 반응 라우터와 공유하는 것에 대해 걱정하지 않고 사용할 수 있다고 생각합니다. 이것은 어둠 속에서 일종의 샷이지만 시도해보십시오. 나는 * 문제없이 작동 할 것이라고 생각합니다. –
네이티브 기록은 다시 렌더링을 트리거하지 않습니다. 나는 라우터에서 역사 싱글 톤에 대한 액세스 없이는 작동하지 않을 것이라고 생각한다. – jfurfaro