使用 react-router 时,我在后退按钮(历史弹出状态)上的滚动位置遇到了一些问题。React router v4 不处理开箱即用的滚动管理,因为浏览器正在实现一些自动滚动行为。这很好,除非浏览器窗口的高度从一个视图到另一个视图变化太大。我已经实现了 ScrollToTop 组件,如下所述:https : //reacttraining.com/react-router/web/guides/scroll-restoration
这很好用。当您单击链接并转到不同的组件时,浏览器会滚动到顶部(就像普通的服务器呈现的网站一样)。只有当您返回(通过浏览器后退按钮)到具有更高窗口高度的视图时才会出现此问题。似乎 (chrome) 试图在 react 呈现内容(和浏览器高度)之前转到上一页的滚动位置。这导致滚动只会根据它来自的视图的高度尽可能向下移动。想象一下这个场景:
View1:一长串电影(窗口高度 3500px)。
(电影被点击)
View2 : 所选电影的详细视图(窗口高度:1000px)。
(点击浏览器后退按钮)
返回视图 1,但滚动位置不能超过 1000px,因为 chrome 试图在 react 渲染长电影列表之前设置位置。
出于某种原因,这只是 Chrome 中的一个问题。Firefox 和 Safari 似乎处理得很好。我想知道其他人是否遇到过这个问题,以及你们通常如何在 React 中处理滚动恢复。
注意:所有电影都是从 sampleMovies.js 导入的——所以在我的示例中我不会等待 API 响应。