8. What about Router / router 怎么办
最后更新于:2022-04-01 05:02:14
建议使用 isomorphic router,就是 browser 与 node 都可以用的 router
## 8.1 [direactor](https://github.com/flatiron/director)
非常轻量级的通用 router,并不是专门为 react 准备的,但是 router 而已,为毛要跟 component 耦合。
### client side
~~~
var routes = {
'/author': ()=>React.render(<Author/>, domNode),
'/author/:id': (id)=>React.render(<Auther id={id}/>, domNode)
};
var router = Router(routes);
router.init();
~~~
### server side
只需要调用 router.dispatch 就好了, 而且 server 端的 react 需要 `renderToString`
~~~
var router = new director.http.Router({
'/author': {
get: function(){
this.res.end(React.renderToString(<Author/>))
}
}
});
var server = http.createServer(function (req, res) {
router.dispatch(req, res, function (err) {
res.writeHead(200, { 'Content-Type': 'text/html' })
if (err) {
res.writeHead(404);
res.end();
}
});
});
~~~
## 8.2 [react router](https://github.com/rackt/react-router)
非常 **非轻量级** 的 router,而且只能给 react component用。
概念上就是使用 Route 把你的 Component 包起来,让 router 决定到底哪个 componet 上
~~~
render((
<Router>
<Route path="/" component={App}>
<Route path="about" component={About}/>
<Route path="users" component={Users}>
<Route path="/user/:userId" component={User}/>
</Route>
<Route path="*" component={NoMatch}/>
</Route>
</Router>
), document.body)
~~~