如何在 react-router 4 中将哈希添加到 url
How to add hash to urls in react-router 4
我想将哈希添加到我在 react-router 中的端点,以防止来自服务器的错误响应。我正在使用 python -m SimpleHTTPServer -p 8888
创建服务器。
这个简短的示例有效,但是当我尝试在 /about
等路线上重新加载页面时,我收到错误消息:Error response Error code 404. Message: File not found. Error code explanation: 404 = Nothing matches the given URI.
import { BrowserRouter as Router, Route, Link, Switch } from "react-router-dom";
const Routes = () => (
<Router>
<div>
<ul>
<li><Link to="/about">About Link</Link></li>
<li><Link to="/company">Company Link</Link></li>
</ul>
<Switch>
<Route path="/about" component={About} />
<Route path="/company" component={Company} />
</Switch>
</div>
</Router>
);
class App extends React.Component {
render() {
return (
<Routes />
);
}
}
有两种解决方法:
1) 让您的网络服务器始终响应相同的 index.html
文件,无论路由如何。这将防止 404 错误,但并不完美,因为它不支持浏览器缓存
2) 使用 HashRouter - 它会将 UI 路由保留在 URL 的散列部分中,这不应使服务器 return 404 并将启用浏览器端缓存。这种方法的缺点是您不能使用#target 链接到网页的特定部分
文档没看好,下面是解决办法:
const Routes = () => (
<HashRouter basename="/#">
<div>
<ul>
<li><Link to="/about">About Link</Link></li>
<li><Link to="/company">Company Link</Link></li>
</ul>
<Switch>
<Route path="/about" component={About} />
<Route path="/company" component={Company} />
</Switch>
</div>
</HashRouter>
);
我想将哈希添加到我在 react-router 中的端点,以防止来自服务器的错误响应。我正在使用 python -m SimpleHTTPServer -p 8888
创建服务器。
这个简短的示例有效,但是当我尝试在 /about
等路线上重新加载页面时,我收到错误消息:Error response Error code 404. Message: File not found. Error code explanation: 404 = Nothing matches the given URI.
import { BrowserRouter as Router, Route, Link, Switch } from "react-router-dom";
const Routes = () => (
<Router>
<div>
<ul>
<li><Link to="/about">About Link</Link></li>
<li><Link to="/company">Company Link</Link></li>
</ul>
<Switch>
<Route path="/about" component={About} />
<Route path="/company" component={Company} />
</Switch>
</div>
</Router>
);
class App extends React.Component {
render() {
return (
<Routes />
);
}
}
有两种解决方法:
1) 让您的网络服务器始终响应相同的 index.html
文件,无论路由如何。这将防止 404 错误,但并不完美,因为它不支持浏览器缓存
2) 使用 HashRouter - 它会将 UI 路由保留在 URL 的散列部分中,这不应使服务器 return 404 并将启用浏览器端缓存。这种方法的缺点是您不能使用#target 链接到网页的特定部分
文档没看好,下面是解决办法:
const Routes = () => (
<HashRouter basename="/#">
<div>
<ul>
<li><Link to="/about">About Link</Link></li>
<li><Link to="/company">Company Link</Link></li>
</ul>
<Switch>
<Route path="/about" component={About} />
<Route path="/company" component={Company} />
</Switch>
</div>
</HashRouter>
);