2

我有两个渲染 ReactDOMindex.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 内部?

4

2 回答 2

1

您可以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>
);
于 2018-11-01T15:47:11.257 回答
0

为什么不用“withRouter”封装头部组件?

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

于 2018-11-01T17:12:49.710 回答