Skip to content
usefy

useHover

Events & gestures

A powerful React hook for detecting hover state on elements with delay support

Install

$ npm install @usefy/use-hover

Quick start

useHover.tsx
import { useHover } from "@usefy/use-hover";

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

  return (
    <div ref={ref} style={{ background: isHovered ? "lightblue" : "white" }}>
      {isHovered ? "Hovering!" : "Hover me"}
    </div>
  );
}

API reference

useHover<T>(options?)

A hook that detects hover state on elements using mouseenter/mouseleave events.

Type Parameter

ParameterConstraintDefaultDescription
TElementHTMLElementThe type of element to attach to

Parameters

ParameterTypeDescription
optionsUseHoverOptionsOptional configuration object

Options

OptionTypeDefaultDescription
enabledbooleantrueEnable/disable hover detection. When false, isHovered is always false
delaynumber | { enter?: number; leave?: number }0Delay in ms before hover state changes. Can be separate for enter/leave
onChange(isHovered: boolean, event?: MouseEvent | TouchEvent) => voidCallback fired when hover state changes
initialHoveredbooleanfalseInitial hover state (useful for SSR)
detectTouchbooleanfalseWhether to detect touch events (touchstart/touchend) for hybrid devices

Returns UseHoverReturn<T>

PropertyTypeDescription
ref(node: T | null) => voidCallback ref to attach to the target element
isHoveredbooleanWhether the element is currently being hovered

The return value also supports tuple destructuring via Symbol.iterator:

const [ref, isHovered] = useHover();

Go deeper

This page is the quick reference. For every example, prop, and edge case, read the full README — or open Storybook to change props live.

More in events & gestures