ReactJS Изменение маршрута с помощью кнопки, которая рендерится на другом ReactDOM - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть два рендеринга ReactDOM на моем index.js

ReactDOM.render(<Header />, document.getElementById('header'));
ReactDOM.render(<App />, document.getElementById('root'));

Теперь внутри моего App.js у меня три маршрута

<Router>
    <Switch>
        <Route exact path = "/" component = { page1 }/>
        <Route path = "/page1" component = { page1 }/>
        <Route path = "/page2" component = { page2 }/>
    </Switch>
</Router>

Затем в моем файле Header.js есть кнопка, по которой я хочу выполнить задание для перехода на другой маршрут или страницу

.
<button onClick={() => this.props.history.push('/page2')}> Next </button>

но проблема в том, что у меня ошибка, говорящая, что

TypeError: Cannot read property 'push' of undefined

Я знаю, что его нет в маршрутизаторе реакции, поэтому я не могу использовать ссылку, но я не знаю, что мне делать,
Вопрос в том, как я могу перейти от одного маршрута к другому, используя кнопку, выполняющую рендеринг из другого ReactDOM, а не внутри ReactDOM, с помощью которого я хотел изменить маршрут?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Почему бы не добавить компонент заголовка оболочки с помощью withRouter?

https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/withRouter.md

0 голосов
/ 01 ноября 2018

Вы можете создать объект history вручную с помощью библиотеки history и экспортировать его из отдельного модуля, который вы можете передать компоненту Router и использовать в компоненте Header.

Пример

// history.js
import createHistory from 'history/createBrowserHistory';

const history = createHistory();

export default history;

// App.js
import history from './history';

export default () => (
  <Router history={history}>
    <Switch>
      <Route exact path = "/" component = { page1 }/>
      <Route path = "/page1" component = { page1 }/>
      <Route path = "/page2" component = { page2 }/>
    </Switch>
  </Router>
);

// Header.js
import history from './history';

export default () => (
  <button onClick={() => history.push('/page2')}> Next </button>
);
...