From 3d2a6555f81590f5a78f1bc7fee86f486a959d08 Mon Sep 17 00:00:00 2001 From: caadiq Date: Sun, 11 Jan 2026 19:06:52 +0900 Subject: [PATCH] =?UTF-8?q?fix(Schedule):=20=EB=AC=B4=ED=95=9C=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A1=A4=20=EC=A4=91=EB=B3=B5=20=EC=9A=94=EC=B2=AD=20?= =?UTF-8?q?=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - inView가 false→true로 변경될 때만 fetchNextPage 실행 - prevInViewRef를 사용하여 이전 상태 추적 - PC 일정, Admin 일정 페이지 모두 적용 --- frontend/src/pages/pc/admin/AdminSchedule.jsx | 6 +++++- frontend/src/pages/pc/public/Schedule.jsx | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) 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]); // 데이터 로드