useDocumentVisibility

A React hook that tracks the document's current visibility state (visible or hidden).

Overview

useDocumentVisibility listens to the visibilitychange event on the document, allowing your components to react when a user switches tabs or minimizes the window. This is perfect for pausing animations, stopping real-time data fetching, or creating playful "welcome back" interactions.

Demo

Tab Visibility Sensor

The Shy Forest Spirit

Try switching tabs and coming back. Our friend only appears when you're looking!

๐ŸŒฒ
๐ŸŒฒ
๐ŸŒฒ
๐Ÿต
Missed you! โœจ
๐ŸŒณ
โ˜๏ธ
โ˜๏ธ
Current State
VISIBLE
Times Hidden
0
Open a new tab, wait 2 seconds, then return!

API Reference

function useDocumentVisibility(): VisibilityState

Returns

NameTypeDescription
visibilityVisibilityStateEither 'visible' or 'hidden'.

Usage Examples

Pause/Resume Timer

import { useDocumentVisibility } from 'react-hooks-ts'
 
function GameTimer() {
  const visibility = useDocumentVisibility()
  const [time, setTime] = useState(0)
 
  useEffect(() => {
    if (visibility === 'visible') {
      const id = setInterval(() => setTime(t => t + 1), 1000)
      return () => clearInterval(id)
    }
  }, [visibility])
 
  return <div>Time: {time}s</div>
}

Welcome Back Message

import { useDocumentVisibility } from 'react-hooks-ts'
 
function AppNotifier() {
  const visibility = useDocumentVisibility()
 
  useEffect(() => {
    if (visibility === 'visible') {
      toast("Great to see you again! โœจ")
    }
  }, [visibility])
 
  return null
}

Features

  • ๐Ÿ‘๏ธ Instant Sync - Updates state immediately on visibility change.
  • ๐Ÿ“‰ Optimization - Perfect for reducing CPU/data usage when the tab is inactive.
  • ๐Ÿ›ก๏ธ SSR Safe - Returns 'visible' as a default for server-side rendering.
  • ๐Ÿงน Automatic Cleanup - Removes event listeners when the component unmounts.