document.visibilityState

document.visibilityState를 이용한 페이지의 상태를 확인하는 방법

2024-12-06

웹 페이지가 현재 사용자에게 보이는지 아닌지를 확인하는 방법이 있다.

document.visibilityState를 사용하면 페이지가 현재 사용자에게 보이는지 아닌지를 확인할 수 있다.

document.visibilityState는 다음과 같은 상태를 가진다.

if (document.visibilityState === 'visible') {
    // 페이지가 사용자에게 보이는 상태
} else {
    // 페이지가 사용자에게 보이지 않는 상태
}
import { useEffect } from 'react';

interface UseVisibilityChangeProps {
  onVisible: () => void;
  onHidden: () => void;
  dependencies?: unknown[];
}

const useVisibilityChange = ({
  onVisible,
  onHidden,
  dependencies = [],
}: UseVisibilityChangeProps) => {
  useEffect(() => {
    const onVisibilityChange = () => {
      document.visibilityState === 'visible' ? onVisible() : onHidden();
    };

    document.addEventListener('visibilitychange', onVisibilityChange);
    return () => {
      document.removeEventListener('visibilitychange', onVisibilityChange);
    };
  }, [onHidden, onVisible, ...dependencies]);
};

export default useVisibilityChange;

웹 페이지 이탈을 감지할 수 있고, 모바일 웹뷰에서 앱의 백그라운드 상태나 전환을 감지할 수 있다.