使用React-router时如何去掉url上的#号

Router组件的history属性,用来监听浏览器地址栏的变化,并将URL解析成一个地址对象,供 React Router 匹配。

history属性,一共可以设置三种值。

browserHistory
hashHistory
createMemoryHistory
如果设为hashHistory,路由将通过URL的hash部分(#)切换,URL的形式类似example.com/#/some/path。

import { hashHistory } from ‘react-router’

render(
,
document.getElementById(‘app’)
)
如果设为browserHistory,浏览器的路由就不再通过Hash完成了,而显示正常的路径example.com/some/path,背后调用的是浏览器的History API。

import { browserHistory } from ‘react-router’

render(
,
document.getElementById(‘app’)
)
但是,这种情况需要对服务器改造。否则用户直接向服务器请求某个子路由,会显示网页找不到的404错误。

如果开发服务器使用的是webpack-dev-server,加上–history-api-fallback参数就可以了。

$ webpack-dev-server --inline --content-base . --history-api-fallback
createMemoryHistory主要用于服务器渲染。它创建一个内存中的history对象,不与浏览器URL互动。

const history = createMemoryHistory(location)
2、node解决方案
如果你使用的是 node 作为服务器,将服务器端的路由最下面的配置为 * 。

// handle every other route with index.html, which will contain
// a script tag to your application’s JavaScript file(s).
app.use(’*’, function (request, response){
response.sendFile(path.resolve(__dirname, ‘public’, ‘index.html’))
})

你可能感兴趣的:(react,router)