如何在BrowserRouter的子级中使用历史记录?

时间:2019-05-03 13:23:07

标签: react-router browser-history react-router-dom history.js

我收到此错误:

'Invariant failed: Browser history needs a DOM'

我尝试了大部分设法找到Google的事情,但似乎没有任何效果。

目前,我的简化设置就是这样

<BrowserRouter forceRefresh={!supportsHistory}>
    <App />
</BrowserRouter>

App是这样的:

import history from './history';

<Router history={history}> // I have to remove Router for it to work at all
    <Switch>
        <Route1 irrelevant/>
        <Route2 irrelevant/>
    </Switch>
</Router>

history.js:

import { createBrowserHistory } from 'history';

export default createBrowserHistory();

Route2:

import history from './history';
import { withRouter } from 'react-router-dom';

<button onClick={() => history.goBack()}>

export default withRouter(Route2);

我使用历史记录的唯一原因是第二条路线中的goBack函数。因此,如果有一种替代方法,我很好奇,或者是否有一种方法可以使历史发挥作用。

1 个答案:

答案 0 :(得分:0)

要访问由路由器控制的历史记录实例,您应使用withRouter,它允许您访问路由器属性:

import { withRouter } from "react-router";
import React from "react";

  render() {
    const { history } = this.props;

    return <button onClick={() => history.goBack()}>;
  }
}