当前位置: 首页 > 知识库问答 >
问题:

如何修复盖茨比JS Link组件保留滚动位置和不重置到顶部

谷弘致
2023-03-14

我正在使用盖茨比2.2.10设置一个网站,链接组件保留了上一页的滚动位置,并且在点击时没有滚动回顶部。

<div className="Footer__legal body">
 <p>© {new Date().getFullYear()} My Nice Company</p>
 <Link to="/privacy-policy">Privacy Policy</Link>
 <Link to="/page-2">Page 2 Link component</Link>
</div>

预期行为:

当您单击“隐私政策”、“第2页”或网站底部的任何页面时,我希望页面加载时用户返回顶部。

实际行为:

用户停留在当前页面的滚动位置

共有3个答案

鞠通
2023-03-14

如果您的页面是无状态功能组件,则可以使用useffect钩子滚动回页面顶部,假设您使用的是graphql,因此您的组件将一些数据作为参数。这样,每次数据更改时,您都会滚动到页面顶部(工作方式类似于componentDidUpdate)。

const PageCmp = ({ data }) => {
    ...
    useEffect(() => {
        window.scrollTo(0,0)
    }, [data])
    ...
}

李光华
2023-03-14

如果您在主体上设置了溢出:隐藏溢出或溢出:自动溢出,则会出现此问题!

丁立果
2023-03-14

您还可以修改盖茨比浏览器。js并为每个滚动更新实现一个钩子:

// in gastby-browser.js
exports.shouldUpdateScroll = ({
  routerProps: { location },
  getSavedScrollPosition,
}) => {
  const { pathname } = location
  // list of routes for the scroll-to-top-hook
  const scrollToTopRoutes = [`/privacy-policy`, `/page-2`]
  // if the new route is part of the list above, scroll to top (0, 0)
  if (scrollToTopRoutes.indexOf(pathname) !== -1) {
    window.scrollTo(0, 0)
  }

  return false
}

您可以在GitHub或GatsbyJS网站上的shouldUpdateScroll文档中找到shouldUpdateScroll的代码。

 类似资料:
  • 抱歉,我的英语很差。 我想要确切的位置。并且在活动/片段被销毁后(不管是我销毁它还是系统销毁它),我重新打开活动/片段,< code > recycle view 也可以在它被销毁的相同位置。 “相同”并不意味着“项目位置”,因为项目可能只是上次显示的一部分。 我想恢复完全相同的位置。 我尝试了下面的一些方法,但没有人是完美的。 有人可以帮忙吗? 1.First方式。 我使用< code>onSc

  • 问题内容: 我的问题是当我在回收视图中滚动数据时,所以加载了新数据,但问题是当新数据加载时,回收视图从第一个产品开始, 我需要保持旧的位置,只滚动新数据,而不滚动所有旧数据 目前,我正在添加文件adeptoer文件和主文件的完整代码, 问题答案: 试试这个:

  • 问题内容: 使用呈现对象列表。假设此列表很长,并且用户正在滚动到底部以查看一些对象。 当用户观察对象时,新项目将添加到列表的顶部。这导致被观察对象改变其位置,即,用户在被观察对象的同一位置突然看到其他东西。 添加新项目后,如何将观察到的对象保持在同一位置? 问题答案: 通过使用的属性,它可能非常优雅地解决了。我使用了两个指令- 一个处理包装器元素的滚动位置,另一个处理新元素。如果有什么不清楚的地方

  • 获得一台新电脑并从GitHub克隆了我的项目,然后运行,但随后它安装时出现了许多错误,因此现在我运行了,并获得了下面的错误消息。请帮助我 错误#10226配置 找不到在“C:\Users\Administrator\Desktop\Projects\IamJude\gatsby config.js”中声明的“gatsby plugin sharp”插件。 尝试在C:\Users\Administr

  • 看看这支笔:https://codepen.io/segmentationfaulter/pen/XzgJyV 为了方便起见,我还在这里粘贴代码。打开上面的画笔后,您将看到一个滑块被渲染。向右滚动滑块,然后单击按钮,您将看到滑块以不同的数字重新渲染,但滑块的滚动位置不会重置。为什么滚动位置没有复位?谢谢

  • 我有一个从Firebase数据库检索数据的简单片段。我使用firebase recycler视图显示检索数据。在滚动或屏幕旋转后,我无法强制回收器视图(或线性布局管理器)恢复滚动位置。 我在这里找到了一些答案,但它们不起作用。 我的代码是: 公共类NewsListFragment扩展了ParentNewsFragment{ } 最后的showToast方法显示了位置的真实数量,但recyclerv