| 1 | import React, { useEffect, useRef, useState, MutableRefObject } from 'react'; |
| 2 | |
| 3 | function useHover<T>(): [MutableRefObject<T>, boolean] { |
| 4 | const [hover, setHover] = useState<boolean>(false); |
| 5 | const ref: any = useRef<T | null>(null); |
| 6 | const handleMouseOver = function () { |
| 7 | setHover(true); |
| 8 | }; |
| 9 | const handleMouseOut = function () { |
| 10 | setHover(false); |
| 11 | }; |
| 12 | useEffect(() => { |
| 13 | const node: any = ref.current; |
| 14 | if (node) { |
| 15 | node.addEventListener('mouseover', handleMouseOver); |
| 16 | node.addEventListener('mouseout', handleMouseOut); |
| 17 | return () => { |
| 18 | node.removeEventListener('mouseover', handleMouseOver); |
| 19 | node.removeEventListener('mouseout', handleMouseOut); |
| 20 | }; |
| 21 | } |
| 22 | }, [ref.current]); |
| 23 | return [ref, hover]; |
| 24 | } |
| 25 | |
| 26 | export default useHover; |