From a56b1801f98e34c05ad33c9fb68078f53124500e Mon Sep 17 00:00:00 2001 From: truewhile <62226914+truewhile@users.noreply.github.com> Date: Thu, 3 Sep 2026 21:18:20 +0800 Subject: [PATCH] =?UTF-8?q?bug=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/pages/HomePage.tsx | 16 ++++++---------- web/src/pages/LibrariesPage.tsx | 16 ++++++---------- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/web/src/pages/HomePage.tsx b/web/src/pages/HomePage.tsx index 00f09ab..7822908 100644 --- a/web/src/pages/HomePage.tsx +++ b/web/src/pages/HomePage.tsx @@ -80,11 +80,11 @@ export function HomePage() { const sortedLibraries = useMemo(() => sortByPinnedIds(libraries, pinnedIds), [libraries, pinnedIds]) // 按需拉取卡片预览管理 - const [fetchedLibIds, setFetchedLibIds] = useState>(new Set()) + const fetchedLibIdsRef = useRef>(new Set()) const fetchingRef = useRef>(new Set()) const fetchPreviews = useCallback(async (ids: string[]) => { - const targets = ids.filter((id) => !fetchedLibIds.has(id) && !fetchingRef.current.has(id)) + const targets = ids.filter((id) => !fetchedLibIdsRef.current.has(id) && !fetchingRef.current.has(id)) if (targets.length === 0) return targets.forEach((id) => fetchingRef.current.add(id)) @@ -104,16 +104,12 @@ export function HomePage() { } catch { // 容错 } finally { - setFetchedLibIds((prev) => { - const next = new Set(prev) - targets.forEach((id) => { - next.add(id) - fetchingRef.current.delete(id) - }) - return next + targets.forEach((id) => { + fetchedLibIdsRef.current.add(id) + fetchingRef.current.delete(id) }) } - }, [fetchedLibIds]) + }, []) // 3. 首屏优先加载:轮播图库 + 媒体库卡片区前 20 个库 + 首屏前 3 个内容行 useEffect(() => { diff --git a/web/src/pages/LibrariesPage.tsx b/web/src/pages/LibrariesPage.tsx index dd46e17..72701f6 100644 --- a/web/src/pages/LibrariesPage.tsx +++ b/web/src/pages/LibrariesPage.tsx @@ -23,11 +23,11 @@ export function LibrariesPage() { const [repairEpisodeArtwork, setRepairEpisodeArtwork] = useState(false) const [repairMsg, setRepairMsg] = useState('') - const [fetchedLibIds, setFetchedLibIds] = useState>(new Set()) + const fetchedLibIdsRef = useRef>(new Set()) const fetchingRef = useRef>(new Set()) const fetchPreviews = useCallback(async (ids: string[]) => { - const targets = ids.filter((id) => !fetchedLibIds.has(id) && !fetchingRef.current.has(id)) + const targets = ids.filter((id) => !fetchedLibIdsRef.current.has(id) && !fetchingRef.current.has(id)) if (targets.length === 0) return targets.forEach((id) => fetchingRef.current.add(id)) @@ -46,16 +46,12 @@ export function LibrariesPage() { } catch { // 容错 } finally { - setFetchedLibIds((prev) => { - const next = new Set(prev) - targets.forEach((id) => { - next.add(id) - fetchingRef.current.delete(id) - }) - return next + targets.forEach((id) => { + fetchedLibIdsRef.current.add(id) + fetchingRef.current.delete(id) }) } - }, [fetchedLibIds]) + }, []) const loadLibraries = useCallback(async () => { setLoading(true)