reactjs - 如何在无限滚动页面上保留/恢复滚动位置?
问题描述
我的 nextjs 应用程序中有一个无限滚动页面,单击浏览器后退按钮时我无法恢复滚动位置。
我正在获取 getServersideProps 中的数据
export const getServerSideProps = async () => {
const res = await fetch('/api');
const data = await res.json();
return { props : { data} }
}
我有一个用于滚动分页的钩子
const { useState, useEffect } = require("react");
const useInifiniteScroll = (callback) => {
const [ isFetching,setIsFetching ] = useState(false);
useEffect(() => {
window.addEventListener('scroll' , handleScroll);
return () => window.removeEventListener('scroll',handleScroll);
},[])
useEffect(() => {
if(!isFetching) return;
callback(() => {
console.log('called back')
})
},[isFetching])
function handleScroll() {
if(window.innerHeight + document.documentElement.scrollTop ===
document.documentElement.offsetHeight / 2 || isFetching) return;
setIsFetching(true)
}
return [ isFetching, setIsFetching ];
}
export default useInifiniteScroll;
我有一个 useEffect 方法来获取 api 的其余部分。我会将两个 api 合并到一个公共状态变量中。
所以在这里如果我导航到下一条路线,我怎样才能恢复以前的滚动位置?
解决方案
推荐阅读
- ubuntu - Hive Hadoop 集群 - Hive 客户端不一致的数据库视图
- python - 使用 python 3 中的类打印卡片组
- php - 我在选择 laravel 5.6 的 get() 中得到一个数组返回
- airflow - 可以在 Airflow UI 中更改 Airflow DAG 计划吗?
- ios - App Store Connect 混合截图和预览
- shell - Shell 变量值替换
- php - 使用 PHP 忽略 CSV 中的列
- git - git pull 后重命名服务器上的文件夹
- c# - Hangfire 后台作业抛出“内存不足,无法继续执行程序。”
- reactjs - React Hooks 常见问题解答:getderivedstatefromprops 的实现导致渲染状态不连贯