第七步:React路由(客户端)

最后更新于:2022-04-01 03:19:16

## 第七步:React路由(客户端) 在app/components目录下新建文件*App.js*,粘贴下面的代码: ~~~ import React from 'react'; import {RouteHandler} from 'react-router'; class App extends React.Component { render() { return ( <div> <RouteHandler /> </div> ); } } export default App; ~~~ `RouteHandler`是渲染当前子路由处理器的组件,它将根据URL渲染这些组件中的一个:Home、Top100、Profile,或Add Character。 > 注意:它和AngularJS中的`<div ng-view></div>`挺相似,会将当前路由中已渲染的模板包含进主布局中。 然后,打开app目录下的*routes.js*,粘贴下面的代码: ~~~ import React from 'react'; import {Route} from 'react-router'; import App from './components/App'; import Home from './components/Home'; export default ( <Route handler={App}> <Route path='/' handler={Home} /> </Route> ); ~~~ 之所以将路由像这样嵌套,是因为我们将在`RouteHandler`的前后添加Navbar和Footer组件。不像其它组件,路由改变的时候,Navbar和Footer组件会保持不变。 最后,我们需要添加一个URL监听程序,当URL改变时渲染应用。打开App目录下的*main.js*并添加下列代码: ~~~ import React from 'react'; import Router from 'react-router'; import routes from './routes'; Router.run(routes, Router.HistoryLocation, function(Handler) { React.render(<Handler />, document.getElementById('app')); }); ~~~ > 注意:*main.js*是我们的React应用的入口点,当Browserify将整个依赖树串起来并生成最终的bundle.js时会用到,这里我们填入初始化的内容后我们基本不用再动它了。 [React Router](http://rackt.github.io/react-router/)引导route.js中的路由,将它们和URL匹配,然后执行相应的callback处理器,在这里即意味着渲染一个React组件到`<div id="app"></div>`。它是怎么知道要渲染哪个组件呢?举例来说,如果我们在`/`URL路径,那么`<Handler />`将渲染Home组件,因为我们之前已经在route.js指定这个组件了。后面我们将添加更多的路由。 另外注意,为了让URL好看点,我们使用了[`HistoryLocation`](http://rackt.github.io/react-router/#HistoryLocation)来启用HMTL History API。比如它的URL看起来会是`http://localhost:3000/add`而不是`http://localhost:3000/#add`,因为我们构建的是一个同型React应用(在客户端和服务端都能渲染),所以我们不需要用一些[非正统的方式](https://github.com/sahat/tvshow-tracker/blob/master/server.js#L343-L345)在服务器上重定向以启用这项特性,它直接就能用。 接下来让我们创建这一节最后一个React组件。在app/components目录新建文件*Home.js*,并添上内容: ~~~ import React from 'react'; class Home extends React.Component { render() { return ( <div className='alert alert-info'> Hello from Home Component </div> ); } } export default Home; ~~~ 下面应该是我们在目前所创建的所有内容。现在是你检查代码的好时候了。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-09-14_55f642e01ef78.jpg) 哦,还有一个,打开app目录下的alt.js并粘贴下面的代码,我将会在第9步真正用到它的时候再解释这些代码的目的。 ~~~ import Alt from 'alt'; export default new Alt(); ~~~ 现在我们只需要在后端设置一些东西,就终于能将我们的应用运行起来了。
';