react-use/src/useIntersection.ts
xobotyi e6fae504b8
feat(prettier): make prettier a part of eslint.
Also reduce max line width to 100. And remove `lint:types` step for
commit sequence, it bothers when committing incomplete (wip) changes.
2021-02-01 18:43:46 +03:00

33 lines
922 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;