React Dojo

Search

Search concepts, exercises and quizzes

dom

useHover

Detects whether the cursor is over a referenced element. Returns a ref and a boolean that updates on mouseenter/mouseleave.


useHover.ts
import { useState, useRef, useEffect } from "react"

export function useHover<T extends HTMLElement>() {
  const [hovered, setHovered] = useState(false)
  const ref = useRef<T>(null)

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

    const enter = () => setHovered(true)
    const leave = () => setHovered(false)

    el.addEventListener("mouseenter", enter)
    el.addEventListener("mouseleave", leave)
    return () => {
      el.removeEventListener("mouseenter", enter)
      el.removeEventListener("mouseleave", leave)
    }
  }, [])

  return [ref, hovered] as const
}
Was this helpful?
Sign in to give feedback