【发布时间】:2020-07-21 20:56:54
【问题描述】:
我在浏览器路由器中实现了一个 ScrollToTop 组件,因此每次新的 dom 更改时滚动位置为 (0,0)。
即)/explore > /about 将滚动到顶部。
但是,在探索页面中,我有一个类似选项卡的子菜单(主页、项目、预算),它可以操纵路由器在不应该滚动到顶部时滚动到顶部。 Home选项卡采用Explore的默认路径,而Items和Budget是Explore内的嵌套路由。
即)/explore > /explore/items 或 /explore > /explore/budget
我尝试在 ScrollToTop 组件中使用条件,但失败了。我查看了 React 路由器培训恢复滚动指南,但没有成功。有人知道如何在某些路径名或位置有条件地禁用滚动到顶部吗?
这是我的 ScrollToTop:
const ScrollToTop = (props) => {
useEffect(() => {
if (props.history.action === 'POP') {
return;
}
let hash = props.location.hash;
if (hash) {
let element = document.querySelector(hash);
if (element) {
element.scrollIntoView({block: 'start', behavior: 'smooth'});
}
} else {
window.scrollTo(0, 0);
}
});
};
【问题讨论】:
-
您将不得不分享 ScrollToTop 的实现
-
@TomFinney 我刚刚更新了我的帖子 :)
-
@episodewon 你可以在这里写下你的方法作为答案。
标签: reactjs scroll react-router