有没有一种方法可以通过相对链接“退出” React应用

时间:2018-08-21 12:45:17

标签: reactjs react-router

上下文

我们有2个不同的React JS应用程序都部署在代理后面。

代理在根/位置上提供一个应用程序(简称为首页)。它在子路径上为另一个服务,例如/application-a/。因此,两者都在同一个域中,例如https://my-site.com/https://my-site.com/application-a/

如果我打开2个新的浏览器窗口并将1个直接导航到/,将另一个直接导航到/application-a/,则效果很好。

当我可能想在根路径应用程序(主页)中使用HTML a标记,并使用相对的{{1}将其链接到在/application-a/子路径下运行的应用程序时,就会出现问题。 }。

在这种情况下,我认为路由器会启动,并希望将其路由到本地应用程序中。我想尝试“逃脱”或“突破”反应路由器。

可能的解决方案

  1. 我认为,如果根应用程序中的定位标记href具有href的{​​{1}}属性值,则可以正常工作-但不理想,因为它会强制加载新标签页。
  2. 如果我对target值使用绝对URL,那么我认为它将“转义” SPA并访问同一选项卡中的新页面。听起来不错-但现在我必须使用绝对URL,这使得代码在dev / staging / live等之间的可移植性降低。
  3. 将路由器_blank的匹配路由明确放入路由器,并以编程方式更改href?我可以看到这可能有效,但对我来说却很混乱。

问题

没有一种方法可以使用老式的锚标记,并且可能提供某种类型的属性,该属性告诉React Router“让我一个人呆着”,让我的行为像静态HTML /中的“常规”锚一样非SPA /非反应式JS页面。如果没有,则欢迎任何其他建议。

相似的未解决问题:Navigating out of a react-router single page application on the same host

1 个答案:

答案 0 :(得分:1)

您可以改用HashRouter吗? https://github.com/ReactTraining/react-router/blob/master/packages/react-router-dom/docs/api/HashRouter.md URL不会“漂亮”,但应该可以。

或者,如果当前网址与任何路由定义都不匹配,则可以将用户重定向到其他应用,例如:

<Route render={() => (<Redirect to="http:/full-url-to/other-app" />)}/>

在所有其他路由定义之后,因此仅当没有其他路由匹配时才匹配。

关于不同环境(分段,实时,...)之间的可移植性,请考虑您还可以在构建时使用Webpack DefinePlugin设置变量,以便可以动态传递基本URL。