Reactjs 是否可以不必硬编码上下文根到用户路由器
由于web应用程序上下文根的概念通常被视为部署问题而不是开发问题,因此我想知道,在使用React Router进行网页导航时,是否可以不在源代码中硬编码上下文根 我希望能够使用部署描述符(例如web.xml)指定的任何上下文根部署我的web应用程序,而不更改任何源代码 以下是保罗的回答 首先,非常感谢保罗。我完全同意在这方面可以使用“basename”属性。我们可以使用构建脚本用不同的值替换“baseName”,这些值将匹配部署描述符指定的最终上下文根 但是,我认为这样做只会隐藏而不会改变以下事实:必须将上下文根嵌入源代码中,这在概念上应该是一个部署问题 我非常想知道为什么React Router选择不解析相对于上下文根的路径“/”,即匹配“/”到“”,或者至少提供一个选项,例如Reactjs 是否可以不必硬编码上下文根到用户路由器,reactjs,react-router,contextroot,Reactjs,React Router,Contextroot,由于web应用程序上下文根的概念通常被视为部署问题而不是开发问题,因此我想知道,在使用React Router进行网页导航时,是否可以不在源代码中硬编码上下文根 我希望能够使用部署描述符(例如web.xml)指定的任何上下文根部署我的web应用程序,而不更改任何源代码 以下是保罗的回答 首先,非常感谢保罗。我完全同意在这方面可以使用“basename”属性。我们可以使用构建脚本用不同的值替换“baseName”,这些值将匹配部署描述符指定的最终上下文根 但是,我认为这样做只会隐藏而不会改变以下事
<Route path="/" relativeToContextRoot="true" …>
毕竟,不将上下文根的实际值视为开发关注点更像是一种规范而非例外。这是否是向React Route团队提交的合理请求?React Router允许您为应用程序指定。basename将从路径名中剥离,位置将与路径的其余部分匹配 例如,如果将基本名称设置为
/mysite
,则对/mysite/page one
的请求将尝试根据定义的路由匹配路径名/page one
动态设置basename值只需要将值注入代码中,使您的代码能够在创建
将使用的历史
实例时访问该值
一种可能的解决方案是在呈现HTML时在窗口上设置一个变量
<script>
window.__BASENAME__ = '/some/root';
</script>
谢谢保罗的回答。我编辑了我的原始问题,以进一步澄清我的想法。我遇到了同样的问题,我不相信这是不可能的,这不仅是web应用程序的常见需求:在企业中是强制性的。任何web应用程序都不应该知道上下文,我简直不敢相信这个功能不存在:'(
const BASENAME = window.__BASENAME__ || '/';
const history = useRouterHistory(createHistory)({
basename: BASENAME
});