【发布时间】:2021-10-30 03:13:54
【问题描述】:
我有一个单页反应应用程序,我有一个带有锚链接的菜单,如下所示:
<a href="/App#story" class="font-medium text-gray-100 hover:text-red-600">Story</a>
在目标 div 中,我有这样的:
<div id="story" class="py-16 xl:py-36 px-4 sm:px-6 lg:px-8 bg-black overflow-hidden">
当我使用npm start 在本地运行页面时,锚链接按预期工作。当我将它部署到网络时,链接给了我一个 404。
为什么会这样?
编辑:
我阅读了react-router-dom 并尝试实现它,但我遇到了奇怪的行为。
- 我在 App.js 的顶部导入了这个:
import {
BrowserRouter as Router,
Switch,
Route,
Link
} from "react-router-dom";
-
我将第一个 App() 函数的输入内容包装在
<Router></Router>中。 -
然后在 App() 部分中,我设置了这个:
<Switch>
<Route path="/about">
<About />
</Route>
</Switch>
- 我的 About 链接设置如下:
<a href="/about" class="text-base text-gray-300 hover:text-white">
About
</a>
- 然后在 App.js 文档的最底部,
下方,我有这个:
function About() {
return (
<><h2>About</h2>
<br />
<p>Test</p></>
);
}
但是,当我单击“关于”链接时,它会重新呈现整个主页以及底部的“关于测试”文本。
我需要做什么才能将其呈现为一个全新的页面?
【问题讨论】:
-
你必须使用°react-router-dom`
-
当您部署时,应用程序是在 root 级别运行,如 server.com/App,还是使用 server.com/foo/App 等路径托管?锚标记将被带到 ${location.origin}/App
-
您说您在 App() 部分中设置了
<Switch>段。你有没有机会将整个主页 outside 该标记?因为如果你这样做了,那听起来可能就是问题所在。通过单击 更改路由只会更改 标记内的内容,因此如果未显示关于页面,则仅显示您的主页,请尝试 <Switch> <Route path="/about"> <About /> </Route> <Route path="/"> <MainPage /> </Route> </Switch>之类的东西。 -
@olafmoriarty - 谢谢。我想我听从了你的解释,但我应该在哪里“定义”
MainPage?如果没有在某处定义它就无法编译,并且主要的“应用程序”称为App(),以我定义“关于”页面的方式定义它似乎没有意义。我错过了什么吗?还是App()应该包含路由器并且每个页面都有自己的功能?