Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.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
Javascript 反应路由器与消失基路由_Javascript_Reactjs_Router - Fatal编程技术网

Javascript 反应路由器与消失基路由

Javascript 反应路由器与消失基路由,javascript,reactjs,router,Javascript,Reactjs,Router,我编写了一个React应用程序,其中我使用React路由器dom和链接和路由对,如 或 在开发中,有/无/basepath的链接和路由都可以正常工作。但是,在npm运行构建之后,只有基本URL的第一次加载起作用。我在应用程序上所做的任何操作都会导致basepath从URL中消失。例如,如果我单击 或 ,两者都应该带我去 https://domain/basepath/subpath,我最终在 https://domain/subpath 该应用程序一直在工作,但无法再找到图像,例如页面刷新自然

我编写了一个React应用程序,其中我使用React路由器dom和链接和路由对,如

在开发中,有/无/basepath的链接和路由都可以正常工作。但是,在npm运行构建之后,只有基本URL的第一次加载起作用。我在应用程序上所做的任何操作都会导致basepath从URL中消失。例如,如果我单击

,两者都应该带我去

https://domain/basepath/subpath
,我最终在

https://domain/subpath

该应用程序一直在工作,但无法再找到图像,例如页面刷新自然失败

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

如何让React路由器将基本路径保留在URL中

编辑:示例链接路由对:


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

编辑2:

路由器结构


用于显示图像的ShowBase和ShowImage代码


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

函数handleClick(事件){
历史推送(“/”);
}
返回
使用重定向 如果我发现了您的问题,您可以尝试在url中放置一个图像id,并使用该图像id转到“basepath”。(在组件中获取参数并显示图像)

您可以像这样使用重定向

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


我想我找到了答案。指向生成目录的链接已消失,这导致了问题。在重新创建链接后,很容易让一切按预期工作。很抱歉花了这么长时间。

谢谢,奥马尔,我试过了,可惜没有用。然而,它帮助我认识到,我更好地澄清了这一点:路由器实际上一直正确地看到和使用/basepath,它只是从浏览器URL中删除。向我展示完整的代码,也许两个URL地址之间存在冲突,因此一部分已经失效,因此您只在生产中面临此问题。在本地开发机器上,一切正常。我说得对吗?您是否正在使用
历史记录。将
推送到应用程序中的任何位置?您可以在问题或沙箱中显示完整的
路线设置吗?以及所有用于更改路线的方法,使用
和/或
历史。推送
。是的,在开发过程中一切正常。是的,我也在使用
history.push
在许多地方使用与链接相同的路径。你认为这是历史造成的吗?我可以不用一个history.push就重写代码,但这会对应用程序的工作方式产生轻微的负面影响。不过还不错。
history.push('/hello')
localhost:3000/some/url
localhost:3000/hello
history.push('hello')
localhost:3000/some/url
localhost:3000/some/hello
。注意“推”中的“hello”和“/hello”。正如我提到的。但您的问题似乎有所不同,因为它适用于dev而不适用于prod。此外,请确保您正在执行
历史记录。使用
/
(斜杠)推送
。我将尝试重现您的问题。谢谢。我在每个链接和历史记录中都使用了一个前导斜杠。按。@tim如果你找到了问题的解决方案,那么你应该把它发布在答案部分。您不应编辑您的问题或添加[已解决]或类似内容。