diff --git a/frontend/src/pages/pc/admin/AdminSchedule.jsx b/frontend/src/pages/pc/admin/AdminSchedule.jsx index 4e1d555..77c2e14 100644 --- a/frontend/src/pages/pc/admin/AdminSchedule.jsx +++ b/frontend/src/pages/pc/admin/AdminSchedule.jsx @@ -202,10 +202,14 @@ function AdminSchedule() { const searchTotal = searchData?.pages?.[0]?.total || 0; // Auto fetch next page when scrolled to bottom + // inView가 true로 변경될 때만 fetch (중복 요청 방지) + const prevInViewRef = useRef(false); useEffect(() => { - if (inView && hasNextPage && !isFetchingNextPage && isSearchMode && searchTerm) { + // inView가 false→true로 변경될 때만 fetch + if (inView && !prevInViewRef.current && hasNextPage && !isFetchingNextPage && isSearchMode && searchTerm) { fetchNextPage(); } + prevInViewRef.current = inView; }, [inView, hasNextPage, isFetchingNextPage, fetchNextPage, isSearchMode, searchTerm]); // selectedDate가 없으면 오늘 날짜로 초기화 diff --git a/frontend/src/pages/pc/public/Schedule.jsx b/frontend/src/pages/pc/public/Schedule.jsx index 85abe11..7705518 100644 --- a/frontend/src/pages/pc/public/Schedule.jsx +++ b/frontend/src/pages/pc/public/Schedule.jsx @@ -92,10 +92,14 @@ function Schedule() { // Auto fetch next page when scrolled to bottom + // inView가 true로 변경될 때만 fetch (중복 요청 방지) + const prevInViewRef = useRef(false); useEffect(() => { - if (inView && hasNextPage && !isFetchingNextPage && isSearchMode && searchTerm) { + // inView가 false→true로 변경될 때만 fetch + if (inView && !prevInViewRef.current && hasNextPage && !isFetchingNextPage && isSearchMode && searchTerm) { fetchNextPage(); } + prevInViewRef.current = inView; }, [inView, hasNextPage, isFetchingNextPage, fetchNextPage, isSearchMode, searchTerm]); // 데이터 로드