当使用react-router时,有什么方法可以防止/#/
在浏览器的地址栏中显示?那是和ReactJS在一起。即点击链接以转到新的路线,显示localhost:3000/#/
或localhost:3000/#/about
。根据路线而定。
发布于 2014-11-29 15:37:16
Router.run(routes, Router.HistoryLocation, function (Handler) {
React.render(<Handler/>, document.body);
});
对于当前版本0.11及更高版本,您需要在Router.run()
中添加Router.HistoryLocation
。<Routes>
现在已被弃用。适用于0.12.x HistoryLocation实施的See the Upgrade Guide。
发布于 2016-01-21 09:02:00
实际上,您可以使用.htaccess来完成此任务。浏览器通常需要查询字符串分隔符?
或#
来确定查询字符串的开始位置和目录路径的结束位置。我们想要的最终结果是www.mysite.com/dir
,因此我们需要在web服务器搜索它认为我们请求/dir
的目录之前捕获该问题。因此,我们在项目的根目录中放置了一个.htaccess
文件。
# Setting up apache options
AddDefaultCharset utf-8
Options +FollowSymlinks -MultiViews -Indexes
RewriteEngine on
# Setting up apache options (Godaddy specific)
#DirectoryIndex index.php
#RewriteBase /
# Defining the rewrite rules
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^.*$ ./index.html
然后使用window.location.pathname获取查询参数
如果你愿意,你可以避免使用react路由,如果你愿意,也可以只操作url和浏览器历史记录。希望这对某些人有帮助。
发布于 2016-01-30 10:27:38
安装历史包
npm install history --save
接下来,从历史记录中导入createHistory和useBasename
import { createHistory, useBasename } from 'history';
...
const history = useBasename(createHistory)({
basename: '/root'
});
如果你的应用url是www.example.com /myApp,那么/root应该是/myApp。
将历史记录变量传递给路由器
render((
<Router history={history}>
...
</Router>
), document.getElementById('example'));
现在,对于所有的Link标签,在所有路径的前面附加一个"/“。
<Link to="/somewhere">somewhere</Link>
该解决方案的灵感来自于React-Router Example,不幸的是,在他们的应用程序接口中没有适当的文档。
https://stackoverflow.com/questions/25086832
复制相似问题