【发布时间】:2021-11-07 20:46:29
【问题描述】:
(已编辑)
我有一个反应应用程序,我想在每个页面上都有导航栏。所以我制作了一个导航栏组件并将其添加到每个新页面。在主页上,导航栏通过滚动到所选部分可以正常工作。但是,在任何其他页面上,导航栏都无法滚动到该部分,因为它没有找到。所以我的问题是,如何使导航栏可点击以重新路由到主页然后滚动到一个元素。
这里是简化的代码
导航栏代码
export default function navbar(){
return(
<div className="nav-container">
<nav>
<ul className="desktop-nav">
<li>
<a
className="link-logo"
onClick = {() => {scrollTo('landing-page')}}
/>
</li>
<li>
<a onClick = {() => {scrollTo('elem1')}}>elem1</a>
</li>
<li>
<a onClick = {() => {scrollTo('elem2')}}>elem2</a>
</li>
<li>
<a onClick = {() => {scrollTo('elem3')}}>elem3</a>
</li>
</ul>
</nav>
</div>
);
}
function scrollTo(elem){
document.getElementById(elem).scrollIntoView(true);
}
主页代码
export default function Home(){
return(
<div>
<div id = 'elem1'>elem1</div>
<div id = 'elem2'>elem2</div>
<div id = 'elem3'>elem3</div>
<a href = '/somewhere'> Go to Second Page </a>
</div>
);
}
应用路由器
function App() {
return (
<Router>
<Switch>
<Route exact path = '/' component = {SITE} />
<Route exact path = '/somewhere' component = {SECOND_PAGE}/>
</Switch>
</Router>
);
}
export default App;
现在从显示为单独页面的 SECOND_PAGE 组件中,如何使导航栏链接转到 SITE 组件并滚动到指定的链接而不向 URL 添加任何内容。如果可能的话,我不希望用户能够看到我的 div ID 和类名。当我浏览这两个组件时,我希望 URL 是静态的。
【问题讨论】:
-
您可能想先通过react-router-dom在您的项目中实现路由/导航,然后链接到页面上的特定锚标记,添加react-router-hash-link。
-
我已经设置了 react-router-dom 来带我到不同的页面。 react-router-hash-link 似乎没有解决我遇到的问题。我想让导航链接转到主页并滚动到指定部分而不向 URL 添加任何内容。
-
嗯,你描述的你想要的(除了在 URL 中显示锚目标)正是哈希链接所做的。让用户查看他们将导航到的位置是否存在问题?我想您可以使用路由状态并指定滚动目标。您能否更新您的问题以包含相关的路由/导航代码,以便我们可以看到您如何呈现路线并尝试链接到主页?
-
您可以将导航栏组件传递到开关之外,以便它显示在每个页面上。我建议使用 react-router-dom 的 Link 标签而不是标签。
-
这个话题或许能帮到你stackoverflow.com/questions/33188994/…
标签: javascript html css reactjs navbar