React Router快速入门教程 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

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

打包并运行,可以发现,问题解决了!

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