import { useEffect, useRef, useCallback } from 'react'; /** * 공통 폴링 훅 — 주기적으로 fetchFn을 호출하고 결과를 onData로 전달. * enabled가 false면 폴링 중지. */ export function usePoll( fetchFn: () => Promise, onData: (data: T) => void, intervalMs: number, enabled = true, ): void { const onDataRef = useRef(onData); onDataRef.current = onData; const fetchRef = useRef(fetchFn); fetchRef.current = fetchFn; const doFetch = useCallback(async () => { try { const data = await fetchRef.current(); onDataRef.current(data); } catch { // graceful — 기존 데이터 유지 } }, []); useEffect(() => { if (!enabled) return; doFetch(); const t = setInterval(doFetch, intervalMs); return () => clearInterval(t); }, [enabled, intervalMs, doFetch]); }