【问题标题】:React Router defining my own Link反应路由器定义我自己的链接
【发布时间】:2017-07-05 14:17:50
【问题描述】:

所以处理路由器导航的<Link /> onClick 的实现很简单:

const { history } = this.context.router;

history.push(to);

这是从github repo拉出来的

所以在我的application 中它应该可以工作,因为上下文是从<Router> 组件传递下来的,对吧?

class App extends React.Component {
  constructor() {
    super(...arguments);
  }

  render() {
    const home = () => (<div>Home</div>);
    const about = () => (<div>About</div>);
    const { history } = this.context.router;

    console.log("History", history);

    return (
      <div>
        <ul>
          <li><Link to="/">Home</Link></li>
          <li><Link to="/about">About</Link></li>
        </ul>

        <Route exact path="/" component={home} />
        <Route path="/about" component={about} />
      </div>
    )
  }
}

ReactDOM.render(
  <Router>
    <App />
  </Router>,
  document.getElementById('main')
);

但正如您在控制台输出中看到的,历史对象是未定义的......

【问题讨论】:

  • withRouter

标签: javascript reactjs react-router react-router-v4 react-router-dom


【解决方案1】:

只是为了澄清 Azium 评论:

class App extends React.Component {
  constructor() {
    super(...arguments);
  }

  render() {
    const home = () => (<div>Home</div>);
    const about = () => (<div>About</div>);
    const { history } = this.props;

    console.log("History", history);

    return (
      <div>
        <ul>
          <li><Link to="/">Home</Link></li>
          <li><Link to="/about">About</Link></li>
        </ul>

        <Route exact path="/" component={home} />
        <Route path="/about" component={about} />
      </div>
    )
  }
}

const AppWithRouter = withRouter(App);

ReactDOM.render(
  <Router>
    <AppWithRouter />
  </Router>,
  document.getElementById('main')
);

withRouter 为您提供道具的匹配、位置、历史记录。

【讨论】:

  • 是的,工作正常。你在试什么? jsbin?
  • jsbin 有很多与库导入相关的警告和错误
  • 是的,您可以忽略所有这些!另外,您需要改为 ReactRouterDOM.withRouter....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 2021-01-12
  • 1970-01-01
  • 2019-04-11
  • 2017-04-16
  • 2020-11-24
  • 2021-06-06
相关资源
最近更新 更多