Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 是否可以不必硬编码上下文根到用户路由器_Reactjs_React Router_Contextroot - Fatal编程技术网

Reactjs 是否可以不必硬编码上下文根到用户路由器

Reactjs 是否可以不必硬编码上下文根到用户路由器,reactjs,react-router,contextroot,Reactjs,React Router,Contextroot,由于web应用程序上下文根的概念通常被视为部署问题而不是开发问题,因此我想知道,在使用React Router进行网页导航时,是否可以不在源代码中硬编码上下文根 我希望能够使用部署描述符(例如web.xml)指定的任何上下文根部署我的web应用程序,而不更改任何源代码 以下是保罗的回答 首先,非常感谢保罗。我完全同意在这方面可以使用“basename”属性。我们可以使用构建脚本用不同的值替换“baseName”,这些值将匹配部署描述符指定的最终上下文根 但是,我认为这样做只会隐藏而不会改变以下事

由于web应用程序上下文根的概念通常被视为部署问题而不是开发问题,因此我想知道,在使用React Router进行网页导航时,是否可以不在源代码中硬编码上下文根

我希望能够使用部署描述符(例如web.xml)指定的任何上下文根部署我的web应用程序,而不更改任何源代码

以下是保罗的回答

首先,非常感谢保罗。我完全同意在这方面可以使用“basename”属性。我们可以使用构建脚本用不同的值替换“baseName”,这些值将匹配部署描述符指定的最终上下文根

但是,我认为这样做只会隐藏而不会改变以下事实:必须将上下文根嵌入源代码中,这在概念上应该是一个部署问题

我非常想知道为什么React Router选择不解析相对于上下文根的路径“/”,即匹配“/”到“”,或者至少提供一个选项,例如

<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
});