23 lines
793 B
TypeScript
Executable File
23 lines
793 B
TypeScript
Executable File
import { useEffect, useRef } from 'react';
|
|
|
|
/**
|
|
* Hook để track visibility của browser tab
|
|
* Trả về ref chứa trạng thái visible hiện tại
|
|
*
|
|
* Sử dụng để pause polling khi tab ẩn, giảm tải cho server và CPU
|
|
*/
|
|
export function useTabVisibility() {
|
|
const isVisibleRef = useRef(!document.hidden);
|
|
|
|
useEffect(() => {
|
|
const handleVisibilityChange = () => {
|
|
isVisibleRef.current = !document.hidden;
|
|
console.log('[TabVisibility]', document.hidden ? 'Tab hidden - pausing polls' : 'Tab visible - resuming polls');
|
|
};
|
|
document.addEventListener('visibilitychange', handleVisibilityChange);
|
|
return () => document.removeEventListener('visibilitychange', handleVisibilityChange);
|
|
}, []);
|
|
|
|
return isVisibleRef;
|
|
}
|