React应用滚动到新呈现的页面上的特定组件,前提是其URL无法使用smooth-scroll
npm
。它被卡在中间到达URL中的组件。例如我有url
http://localhost:3000/#contact
它的停止在这个中间。
APP.js:
export default function App() {
useEffect(() => {
if (window.location.hash) {
let elem = document.getElementById(window.location.hash.slice(1));
if (elem) {
elem.scrollIntoView({ behavior: "smooth" });
}
} else {
window.scrollTo({ top: 0, left: 0, behavior: "smooth" });
}
}, [window.location.hash]);
<div className="main-container">
<Header/>
<Home />
<About />
<Blog />
<Contact />
<Footer />
<ScrollToTop />
</div>
)}
contact page
<div id="contact" className="newContact">
<h2 style={{ marginbottom: "12px" }}>Contact us</h2>
</div>
当用户输入url
时,我期望它应该转到该组件。
1条答案
按热度按时间ia2d9nvy1#
解决方案是使用react-scroll库
安装rect-scroll
在组件文件中从react-scroll导入Link组件:
将导航链接中的锚标记()替换为“链接”组件:
Link组件的to属性应该是目标组件的ID。
在useEffect钩子中,当URL中没有哈希值时,使用react-scroll中的scrollToTop()函数滚动到页面顶部:
还可以将持续时间属性传递给scrollToTop()函数,以控制滚动动画的速度。