Как использовать историю в дочернем BrowserRouter? - PullRequest
1 голос
/ 03 мая 2019

Я получаю эту ошибку:

'Invariant failed: Browser history needs a DOM'

Я перепробовал большинство вещей, которые мне удалось найти, гуглил, похоже, ничего не работает.

В настоящее время моя упрощенная установка выглядит примерно так

<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 голосов
/ 03 мая 2019

Для доступа к экземпляру истории, управляемому вашим маршрутизатором, вы должны использовать withRouter , который позволяет вам получить доступ к свойствам маршрутизатора:

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

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

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