React Router快速入门教程 互动版

嵌套路由

有时会需要在每个页面上都显示App组件。如果没有React Router,就需要在每个页面上渲染App。这样的话,随着项目代码逐渐增多,代码冗杂现象就出现了。React Router跟Ember学了一个方法来共享UI,也就是嵌套路由。

很可能你需要的界面是:

也就是点击男神链接时,App组件还在被渲染,还能在界面上看到App组件。这可以通过把Boys和Girls路由嵌套在App路由中实现。因为这样的话,Boys路由就是App路由的子路由。记住一句话“子路由被激活时,其父路由也被激活”,所以Boys路由被激活时,App路由也是激活的状态,所以还在界面中显示。

代码改造

1.在index.js中,渲染Boys和Girls的路由要成为App的子路由。

// index.js
// ...
render((
  <Router history={hashHistory}>
    <Route path="/" component={App}>
      <Route path="/boys" component={Boys}/>
      <Route path="/girls" component={Girls}/>
    </Route>
  </Router>
), document.getElementById('app'))

2.在App中要渲染他的子组件,用{this.props.children}实现,换句通俗的话讲,就是在App中留个位置,用于显示子组件。如下所示:

// modules/App.js
// ...
  render() {
    return (
      <div>
        <h1>Ghettohub Issues</h1>
        <ul role="nav">
          <li><Link to="/boys">男神</Link></li>
          <li><Link to="/girls">女神</Link></li>
        </ul>

        {this.props.children}
      </div>
    )
  }
// ...

代码改造好了之后,打包运行。此时,虽然界面没有上图的整洁,但是已经到达了目的。现在来看,React Router组织界面的方式,特别像是大箱子套小箱子,对于男神和女神界面的组织方式如下:

就像搭积木一样,想要搭一个房子,可以先搭门、窗、墙等的小物体,最后把这些小物体组合起来就是一个房子。这就是React Router的思想:每条路由都可以是一个独立的小的应用,通过路由的配置将这小的应用组合起来,就是你所期待的大应用。就好比是大应用嵌套了小应用,特别像是大箱子套小箱子。

紧跟本节的讲解,在右面进行相应的操作。