VayuUI

useHover

A hook that detects if an element is being hovered.

The useHover hook allows you to detect when a user's mouse is over a specific element. It returns a ref that depends on the element you want to track, and a boolean isHovered state.

Demo

Hover Me!
State: false

Source Code

Copy this code into src/hooks/useHover.ts:

import { useState, useRef, useEffect } from 'react';

export const useHover = <T extends HTMLElement>() => {
  const [isHovered, setIsHovered] = useState(false);
  const ref = useRef<T | null>(null);

  useEffect(() => {
    const element = ref.current;
    if (!element) return;

    const handleMouseEnter = () => setIsHovered(true);
    const handleMouseLeave = () => setIsHovered(false);

    element.addEventListener('mouseenter', handleMouseEnter);
    element.addEventListener('mouseleave', handleMouseLeave);

    return () => {
      element.removeEventListener('mouseenter', handleMouseEnter);
      element.removeEventListener('mouseleave', handleMouseLeave);
    };
  }, []);

  return { ref, isHovered };
};

Usage

import { useHover } from '@/hooks/useHover';

const HoverCard = () => {
  const { ref, isHovered } = useHover<HTMLDivElement>();

  return (
    <div
      ref={ref}
      style={{
        backgroundColor: isHovered ? 'blue' : 'gray',
        color: 'white',
        padding: '20px',
      }}
    >
      {isHovered ? 'Get off me!' : 'Hover me!'}
    </div>
  );
};

API Reference

Return Value

PropertyTypeDescription
refRefObject<T>A React ref to attach to the target element.
isHoveredbooleantrue if the element is being hovered, false otherwise.

On this page