Skip to content

Instantly share code, notes, and snippets.

@pena56
Created December 3, 2021 20:53
Show Gist options
  • Save pena56/35f5f7010ce51783ff9038c09b84b247 to your computer and use it in GitHub Desktop.
Save pena56/35f5f7010ce51783ff9038c09b84b247 to your computer and use it in GitHub Desktop.
import { useState, useRef, useCallback, useEffect } from 'react';
function useInfiniteScroll() {
const [page, setPage] = useState(1);
const loadMoreRef = useRef(null);
const handleObserver = useCallback((entries) => {
const [target] = entries;
if (target.isIntersecting) {
setPage((prev) => prev + 1);
}
}, []);
useEffect(() => {
const option = {
root: null,
rootMargin: '0px',
threshold: 1.0,
};
const observer = new IntersectionObserver(handleObserver, option);
if (loadMoreRef.current) observer.observe(loadMoreRef.current);
}, [handleObserver]);
return { loadMoreRef, page };
}
export default useInfiniteScroll;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment