useHover
React hook to track when an element is being hovered over.
Add the hook via the CLI:
sh
npx @novajslabs/cli add useHover
sh
npx @novajslabs/cli add useHover
sh
pnpm dlx @novajslabs/cli add useHover
Or copy and paste the code into your project:
ts
import { useState, RefObject, useEffect } from "react";
export const useHover = (ref: RefObject<HTMLElement>) => {
const [isHovered, setIsHovered] = useState<boolean>(false);
const handleMouseEnter = () => setIsHovered(true);
const handleMouseLeave = () => setIsHovered(false);
useEffect(() => {
const node = ref.current;
if (node) {
node.addEventListener("mouseenter", handleMouseEnter);
node.addEventListener("mouseleave", handleMouseLeave);
return () => {
node.removeEventListener("mouseenter", handleMouseEnter);
node.removeEventListener("mouseleave", handleMouseLeave);
};
}
}, [ref]);
return isHovered;
};
js
import { useState, useEffect } from "react";
export const useHover = (ref) => {
const [isHovered, setIsHovered] = useState(false);
const handleMouseEnter = () => setIsHovered(true);
const handleMouseLeave = () => setIsHovered(false);
useEffect(() => {
const node = ref.current;
if (node) {
node.addEventListener("mouseenter", handleMouseEnter);
node.addEventListener("mouseleave", handleMouseLeave);
return () => {
node.removeEventListener("mouseenter", handleMouseEnter);
node.removeEventListener("mouseleave", handleMouseLeave);
};
}
}, [ref]);
return isHovered;
};
Requirements
React 16.8 or higher
Parameters
ref required
Type: HTMLElement
The HTML element to track.
Return values
isHovered
Type: boolean
Indicates whether the HTML element is currently hovered (true
) or not (false
).
Example
tsx
import { useRef } from "react";
import { useHover } from "./hooks/useHover";
const App = () => {
const boxRef = useRef<HTMLDivElement>(null);
const isHovered = useHover(boxRef);
return (
<div ref={boxRef} style={{ padding: "20px", border: "1px solid black" }}>
{isHovered ? "Hovering..." : "Not hovering"}
</div>
);
};
export default App;
Use cases
Here are some use cases where this React hook is useful:
- Displaying tooltip on hover
- Highlighting table row on hover
- Playing a video preview on hover
- Showing an overlay on card hover