import React, { useState, useRef, useEffect } from 'react'; import { Props } from './props'; import { styles } from './styles'; export const RenderTrigger: React.FC = (props: Props) => { const { children = 'Loading...' } = props; const useOnScreen = (ref: React.RefObject) => { const [isIntersecting, setIntersecting] = useState(false); const observer = new IntersectionObserver(([entry]) => { setIntersecting(entry.isIntersecting); if (entry.isIntersecting) { props.onShow && props.onShow(); } else { props.onHide && props.onHide(); } }); useEffect(() => { observer.observe(ref.current as Element); return () => observer.disconnect(); }, []); return isIntersecting; }; const ref = useRef(null); ref !== null && useOnScreen(ref); return (
{children}
); };