public/src/hooks/useHover.ts (21 lines of code) (raw):

import { useState, useRef, useEffect, RefObject } from 'react'; const useHover = <Element extends HTMLElement>(): [RefObject<Element>, boolean] => { const [isHovered, setIsHovered] = useState(false); const handleMouseOver = (): void => setIsHovered(true); const handleMouseOut = (): void => setIsHovered(false); const ref = useRef<Element>(null); useEffect(() => { if (ref.current) { ref.current.addEventListener('mouseover', handleMouseOver); ref.current.addEventListener('mouseout', handleMouseOut); return (): void => { if (ref.current) { ref.current.removeEventListener('mouseover', handleMouseOver); ref.current.removeEventListener('mouseout', handleMouseOut); } }; } }, [ref.current]); return [ref, isHovered]; }; export default useHover;