【发布时间】:2018-09-03 04:07:43
【问题描述】:
我有一个带有 React 应用程序的非 SPA 服务器端应用程序,该应用程序仅限于当前页面 /some/static/page。 应用程序在所有页面上都有<head> 中的<base href="/"> 并依赖它,这是无法更改的。
这是 React 16、React Router 4 和 <HashRouter> 的基本示例:
export class App extends React.Component {
render() {
return (
<HashRouter>
<div>
<Route exact path="/" component={Root} />
</div>
</HashRouter>
);
}
}
出于测试目的,可以禁用所有路由,但这不会改变行为。
Here is create-react-app project 显示问题。复制它的步骤是:
npm inpm start- 导航到
http://localhost:3000/some/static/page
HashRouter 明显受到<base> 的影响。它在初始化时从 /some/static/page 重定向到 /#/,而我希望它是 /some/static/page#/ 或 /some/static/page/#/(仅在 IE 11 中按预期工作)。
Root 组件在重定向到 /#/ 之前快速飞溅。
如果是<base href="/foo">,它会重定向到/foo/#/,当<base> 标签被移除时,它会重定向到/some/static/page/#/。
该问题影响 Chrome 和 Firefox(最新版本),但不影响 Internet Explorer (IE 11)。
为什么<HashRouter> 会受到<base> 的影响?在这里使用它正是因为它不应该影响位置路径,只会影响哈希。
如何解决这个问题?
【问题讨论】:
-
仅在 IE11 上按预期工作......好吧,这是第一个......
-
请说明您想要的预期行为是什么。
-
它在初始化时从 /some/static/page 重定向到 /#/,而我希望它是 /some/static/page#/ 或 /some/static/page/# / 。 IE。它不应该用基本网址替换
location.pathname。
标签: javascript reactjs react-router base-url base-tag