我有一个页面我正在尝试修复,以便在用户按下后退按钮(浏览器)时保持滚动位置。假设我有一个名为 list 的组件,我在其中向用户展示了一些产品。要查看所有产品,用户可以向下滚动列表组件。当用户单击某个产品时,应用程序会将用户重定向到详细信息组件。然后,当用户尝试返回列表,点击浏览器的后退按钮时,列表组件被渲染,并且似乎自动滚动到顶部。
据我所知,按下浏览器的后退按钮会触发一个window.history.back()
动作,没有其他反应。
对于一个解决方案,我在我的应用程序的上下文中实现了一个变量,它保存了 scrollY 值,然后,在我试图呈现的组件(列表组件)的componentWillMount
(或)中,我将滚动位置设置为值集useEffect
在上下文中。
我的解决方案的详细信息在这里,因为我的整个代码都基于这个堆栈溢出的帖子: 如何在返回下一个 js 时更改滚动行为?
我已经使用一些日志检查了该值,并且滚动位置已正确保存在上下文中,但是,由于我使用的是窗口事件侦听器,它会在呈现列表组件后将值设置为零。
在我的代码中,我没有使用任何类型的滚动配置,所以我想知道这种行为是否是 Next.js 或 react 的某种默认行为。当用户点击浏览器的后退按钮时会发生这种情况,但我是 next 的新手,我不知道我是否遗漏了什么或什么,我什至不知道这个问题是否与 React 或Next.js 本身。