반응형
참고
- 마우스가 일정 시간 움직이지 않는 경우 새로고침하기
페이지가 가려졌거나, 보이지 않는 경우에 이벤트를 감지해 보자.
구현
페이지 가시성은 document의 visibilityState로 확인할 수 있다.
const [visibility, setVisibility] = useState(document.visibilityState);
그리고 visibilitychange 이벤트로 가시성 상태 변경을 감지한다.
useEffect에 이벤트를 등록해서 이벤트를 처리하면 된다. (clean-up 함수에서는 이벤트를 제거한다.)
useEffect(() => {
const handleVisibilityChange = () => {
setVisibility(document.visibilityState); // visible, hidden, prerender, unloaded
};
document.addEventListener("visibilitychange", handleVisibilityChange);
return () => {
document.removeEventListener("visibilitychange", handleVisibilityChange);
};
}, []);
하지만 visibility 변경이 매우 빠르게 일어나므로, hidden으로 변경되는 것을 확인하기 어렵다.
따라서 setTimeout을 이용해 3초 뒤에 변경되도록 보완한다.
const handleVisibilityChange = () => {
setTimeout(() => {
setVisibility(document.visibilityState); // visible, hidden, prerender, unloaded
}, [3000]);
};
전체 코드는 다음과 같다.
import React, { useEffect, useState } from "react";
const PageCheck = () => {
const [visibility, setVisibility] = useState(document.visibilityState);
useEffect(() => {
const handleVisibilityChange = () => {
setTimeout(() => {
setVisibility(document.visibilityState); // visible, hidden, prerender, unloaded
}, [3000]);
};
document.addEventListener("visibilitychange", handleVisibilityChange);
return () => {
document.removeEventListener("visibilitychange", handleVisibilityChange);
};
}, []);
return (
<div>
<h1>페이지를 보고 있는지 확인</h1>
<p>현재 페이지 상태: {visibility}</p>
</div>
);
}
export default PageCheck;
반응형
'개발 > React' 카테고리의 다른 글
리액트 - Netlify로 배포된 프로젝트에 리액트 라우터 적용하기 (0) | 2024.04.25 |
---|---|
리액트 - Netlify로 리액트 프로젝트 배포하기 (0) | 2024.04.25 |
리액트 - 마우스가 일정 시간 움직이지 않는 경우 새로고침하기 (useEffect with Mouse Move Event) (0) | 2024.04.24 |
리액트 Custom Hook - 모든 페이지의 로컬 스토리지 변경 감지하기 (useLocalStorage) (0) | 2024.04.15 |
리액트 Custom Hook - input 입력 유효값 검사하기 (useInput) (0) | 2024.04.15 |
댓글