【问题标题】:React router and disappearing base route反应路由器和消失的基本路线
【发布时间】:2020-09-26 18:00:18
【问题描述】:

我编写了一个 React 应用程序,其中我使用 react-router-dom 和 Link 和 Route 对,例如

<Link to="/subpath"> <Route path="/subpath">

<Link to="/basepath/subpath"> <Route path="/basepath/subpath">

在开发中,无论有无 /basepath 的链接和路由都可以正常工作。但是,在 npm run build 之后,只有第一次加载基本 URL 有效。我在应用程序上所做的任何事情都会导致基本路径从 URL 中消失。例如,如果我点击一个

<Link to="/subpath">

<Link to="/basepath/subpath">,两者都应该带我去

https://domain/basepath/subpath,我到了

https://domain/subpath

该应用程序继续运行,但无法再找到图像,例如页面刷新自然失败。

我已经尝试了我从互联网上找到的所有可能会影响这一点的方法,例如将 basename 添加到 BrowserRouter,将主页设置为 package.json,使用 PUBLIC_URL 构建,并将 basepath 添加到每个 Link 和 Route 标签。 (我什至尝试在 Link 标记中给出基本路径两次,但两个基本路径都从 URL 中消失了。:-))

如何让 React Router 将基本路径保留在 URL 中?

编辑:示例链接路由对:

<Link to={"/somepath/path/" + someId}>
  <img  src={"https://domain/somepath/" + image + ".jpg"} />
</Link>

<Route path="/somepath/path/:someId">
  <ShowImage />
</Route>

链接和路由路径也可以不带/somepath,即。 “/path/...”,在开发中没有区别,但在生产中也没有。 单击该链接应使浏览器转到https://domain/somepath/path/someId, 但它去 https://domain/path/someId 该应用程序和路由似乎工作得很好,因为它接下来显示 ShowImage。然而,同时图像源显然变成了 https://domain/image.jpg 因为 ShowImage 无法从相同的源地址找到相同的图像。

编辑 2:

路由器结构。

<Router>
  <Switch>
    <Route path="/somepath/:someId">
      <ShowImage />
    </Route>
    <Route path="/">
      <ShowBase />
    </Route>
  </Switch>
</Router>

显示图像的 ShowBase 和 ShowImage 代码。

<img src={"https://domain/basepath/" + image + ".jpg"} />

ShowImage history.push(带或不带 /basepath)和按钮处理。

function handleClick(event) {
  history.push('/');
}
<button onClick={handleClick}>Back</button>

【问题讨论】:

  • 所以你只在生产中遇到这个问题。在本地开发机器上一切正常。我对吗?您是否在应用程序的任何地方使用history.push?您能否在问题或沙盒中显示您的完整 Route 设置?以及您用于更改路线的所有方法,使用&lt;Link&gt; 和/或history.push
  • 是的,开发中一切正常。是的,我也在很多地方使用history.push,与链接的路线相同。你认为 history.pushs 导致了这个?我可以在没有一个 history.push 的情况下重写代码,但这会对应用程序的工作方式产生轻微的不利影响。不过还不错。
  • history.push('/hello')localhost:3000/some/urllocalhost:3000/hellohistory.push('hello')localhost:3000/some/urllocalhost:3000/some/hello。注意“push”中的“hello”和“/hello”。正如我提到的here。但是您的问题似乎有所不同,因为它适用于 dev 而不是 prod。此外,请确保您使用/(前导斜杠)执行history.push。我会尝试重现您的问题。
  • 谢谢。我在每个 Link 和 history.push 中使用前导斜杠。
  • @tim 如果您找到了问题的解决方案,那么您应该将其发布在答案部分。您不应编辑您的问题或添加 [SOLVED] 等。

标签: javascript reactjs router


【解决方案1】:

我想我明白了。构建目录的链接消失了,这导致了问题。重新创建链接后,很容易让一切按预期工作。抱歉,拖了这么久。

【讨论】:

    【解决方案2】:

    使用重定向

    如果我遇到您的问题,您可以尝试在 url 中放置一个图像 ID,然后使用图像 ID 转到“基本路径”。 (并在组件中获取参数并显示图像)

    你可以像这样使用重定向

    <Redirect exact from="/:id" to="/basepath/:id" />
    

    【讨论】:

    • 谢谢,Omer,我试过了,不幸的是它没有帮助。然而,它帮助我意识到我最好澄清这一点:路由器实际上始终正确地看到和使用 /basepath,它只是从浏览器 URL 中删除。
    • 给我完整的代码,可能你的两个Url地址有冲突所以一部分没了
    猜你喜欢
    • 2017-05-27
    • 2019-11-18
    • 2020-11-27
    • 2021-12-21
    • 2016-08-18
    • 2017-06-14
    • 2021-06-18
    • 2021-03-17
    • 1970-01-01
    相关资源
    最近更新 更多