From 6d0203cc7d8e5ccae85b7d817b242d86016477fb Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Tue, 19 May 2026 14:41:39 +0800 Subject: [PATCH] fix: hindari refetch saat mount pada halaman list pengumuman Gunakan useRef untuk skip efek di render pertama sehingga refetch hanya dipanggil saat state update berubah (setelah CRUD), bukan setiap kali halaman dibuka. --- app/(application)/announcement/index.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/(application)/announcement/index.tsx b/app/(application)/announcement/index.tsx index 23389e6..05bb835 100644 --- a/app/(application)/announcement/index.tsx +++ b/app/(application)/announcement/index.tsx @@ -11,7 +11,7 @@ import { useTheme } from "@/providers/ThemeProvider"; import { MaterialIcons } from "@expo/vector-icons"; import { useInfiniteQuery } from "@tanstack/react-query"; import { router } from "expo-router"; -import { useEffect, useMemo, useState } from "react"; +import { useEffect, useMemo, useRef, useState } from "react"; import { Pressable, RefreshControl, View, VirtualizedList } from "react-native"; import { useSelector } from "react-redux"; @@ -27,6 +27,7 @@ export default function Announcement() { const { colors } = useTheme(); const [search, setSearch] = useState('') const update = useSelector((state: any) => state.announcementUpdate) + const isFirstRender = useRef(true) const { visible: guideVisible, dismiss: dismissGuide } = useGuide('announcement') const arrSkeleton = Array.from({ length: 5 }, (_, i) => i) @@ -61,7 +62,10 @@ export default function Announcement() { }, }) - useEffect(() => { refetch() }, [update, refetch]) + useEffect(() => { + if (isFirstRender.current) { isFirstRender.current = false; return } + refetch() + }, [update]) const flattenedData = useMemo(() => data?.pages.flat() || [], [data])