1

我有一个 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

4

1 回答 1

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();
于 2017-04-17T17:12:22.787 回答