我有一个React应用程序,它共享一个外部脚本文件,用vanilla JS构建一个公司范围的头文件。在该标题中是一个动态绑定到任何应用程序调用它的根的徽标(location.origin
)。
捕获点击导航并使用React Router v3之前很简单,因为在您设置路径的任何地方都会访问browserHistory:
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 v4(react-router-dom
),如何在不将侦听器绑定到组件内部并使用props.history
的情况下完成此操作?
答案 0 :(得分:2)
我认为你可以导出你创建的历史对象并传入路由器,然后直接用它来代替browserHistory
。
// app.js
import { Router } from 'react-router'
import createBrowserHistory from 'history/createBrowserHistory'
export const myHistory = createBrowserHistory()
<Router history={myHistory}>
<App/>
</Router>
// header.js
import { myHistory } from './app.js';
function captureLogoClick() {
const logoLink = document.querySelector('#company-header .logo a');
if(logoLink) {
logoLink.addEventListener('click', (e) => {
e.preventDefault();
myHistory.push('/');
});
} else {
// Resource hasn't loaded yet
setTimeout(captureLogoClick, 100);
}
}
captureLogoClick();