client/src/hooks/useInfiniteScroll.js
import { useState, useEffect } from 'react';
const useInfiniteScroll = 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, callback]);
function handleScroll() {
if (
window.innerHeight + document.documentElement.scrollTop !==
document.documentElement.offsetHeight ||
isFetching
)
return;
setIsFetching(true);
}
return [isFetching, setIsFetching];
};
export default useInfiniteScroll;