mirror of
https://github.com/streamich/react-use.git
synced 2026-01-18 14:06:52 +00:00
30 lines
909 B
TypeScript
30 lines
909 B
TypeScript
import { RefObject, useEffect, useState } from 'react';
|
|
|
|
const useIntersection = (
|
|
ref: RefObject<HTMLElement>,
|
|
options: IntersectionObserverInit
|
|
): IntersectionObserverEntry | null => {
|
|
const [intersectionObserverEntry, setIntersectionObserverEntry] = useState<IntersectionObserverEntry | null>(null);
|
|
|
|
useEffect(() => {
|
|
if (ref.current && typeof IntersectionObserver === 'function') {
|
|
const handler = (entries: IntersectionObserverEntry[]) => {
|
|
setIntersectionObserverEntry(entries[0]);
|
|
};
|
|
|
|
const observer = new IntersectionObserver(handler, options);
|
|
observer.observe(ref.current);
|
|
|
|
return () => {
|
|
setIntersectionObserverEntry(null);
|
|
observer.disconnect();
|
|
};
|
|
}
|
|
return () => {};
|
|
}, [ref.current, options.threshold, options.root, options.rootMargin]);
|
|
|
|
return intersectionObserverEntry;
|
|
};
|
|
|
|
export default useIntersection;
|