Files
DefectingCat.github.io/lib/hooks/use-in-view.ts
DefectingCat 32d8d48514 add gist loading page
format code
2023-08-14 13:36:15 +08:00

29 lines
693 B
TypeScript

import { useCallback, useEffect, useRef, useState } from 'react';
const useInView = () => {
const ref = useRef(null);
const [inView, setInView] = useState(false);
const observeCallback: IntersectionObserverCallback = useCallback(
(entries, observer) => {
entries.forEach((entry) => {
if (!entry.isIntersecting) return;
if (!ref.current) return;
setInView(true);
observer.unobserve(ref.current);
});
},
[],
);
useEffect(() => {
const observer = new IntersectionObserver(observeCallback);
ref.current && observer.observe(ref.current);
}, [observeCallback]);
return { ref, inView };
};
export default useInView;