browserHistory
目前为止,我们应用的URL是建立在哈希值的基础上的。现在的浏览器允许JavaScript操控URL而不产生Http请求,所以,我们不必依赖于URL中的哈希部分来进行路由的切换。React Router中还提供了browserHistory。
在index.js中导入browserHistory,而不是导入hashHistory
// ...
import { Router, Route, browserHistory, IndexRoute } from 'react-router'
render((
<Router history={browserHistory}>
//...
</Router>
), document.getElementById('app'))
哈哈,这样的方式,在URL中就没有乱七八糟的哈希值了。
别高兴太早!
你点击个男神链接,在刷新下浏览器看看:Cannot GET /boys
出错了吧,但不怕。这个错误的原因是当前的Server不知道怎么处理刷新的请求,所以出错。因此我们可以在服务器(app.js)中设置一下,收到所有的请求后Server都反馈index.html,问题就可以解决:
1.修改app.js(看清楚,不是App.js哦):
// app.js
var express = require('express')
//导入path
var path = require('path')
var app = express()
// serve our static stuff like index.css
app.use(express.static(__dirname))
//就是这句代码,解决的问题。
app.get('*', function (req, res) {
res.sendFile(path.join(__dirname, 'index.html'))
})
var PORT = process.env.PORT || 8080
app.listen(PORT, function() {
console.log('Production Express server running at localhost:' + PORT)
})
2.把index.html中的相对路径改为绝对路径:index.css -> /index.css 以及bundle.js -> /bundle.js
打包并运行,可以发现,问题解决了!
紧跟本节的讲解,在右面进行相应的操作。