import React from 'react' import { render } from 'react-dom' import { Router, Route, hashHistory } from 'react-router' import App from './modules/App' import About from './modules/About' import Repos from './modules/Repos' render(( <Router history={hashHistory}> <Route path="/" component={App}/> <Route path="/repos" component={Repos}/> <Route path="/about" component={About}/> </Router> ), document.getElementById('app'))
使用 hashHistory,浏览器上看到的 url 会是这样的: /#/repos?_k=adseisreact
使用 browserHistory,浏览器上看到的 url 会是这样的:/reposnginx
看起来固然 browserHistory 很好很理想,但 browserHistory 须要 server 端支持。 而使用hashHistory的时候,由于 url 中 # 符号的存在,从 /#/ 到 /#/repos 浏览器并不会去发送一次 request,react-router 本身根据 url 去 render 相应的模块。express
而使用 browserHistory 的时候,浏览器从 / 到 /repos 是会向 server 发送 request 的。因此 server 端是要作特殊配置的。好比用的 express 的话,你须要 handle 全部的路由 app.get('*', (req, res) => { ... }),使用了 nginx 的话,nginx也要作相应的配置。浏览器
若是只是想去掉 ?_k=adseis 这样的字符串的话,能够使用外部的 history 模块。react-router
import { createHashHistory } from 'history'; const appHistory = useRouterHistory(createHashHistory)({ queryKey: false }); ReactDOM.render( <Router history={appHistory}> {routes} </Router>, document.getElementById('app') );
这样子,url 会稍微干净点,但 hash 还在,/#/reposapp