Skip to content

Instantly share code, notes, and snippets.

@sriram-palanisamy-hat
Created October 26, 2025 15:26
Show Gist options
  • Select an option

  • Save sriram-palanisamy-hat/9ee8ffee9efb6149d36525a306921659 to your computer and use it in GitHub Desktop.

Select an option

Save sriram-palanisamy-hat/9ee8ffee9efb6149d36525a306921659 to your computer and use it in GitHub Desktop.
Create a useHover() hook
import { useState, useRef, useEffect } from "react";
export function useHover<T extends HTMLElement>() {
const [isHovered, setIsHovered] = useState(false);
const ref = useRef<T | null>(null);
useEffect(() => {
const node = ref.current;
if (!node) return;
const handleMouseEnter = () => setIsHovered(true);
const handleMouseLeave = () => setIsHovered(false);
node.addEventListener("mouseenter", handleMouseEnter);
node.addEventListener("mouseleave", handleMouseLeave);
return () => {
node.removeEventListener("mouseenter", handleMouseEnter);
node.removeEventListener("mouseleave", handleMouseLeave);
};
}, [ref.current]);
return { ref, isHovered };
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment