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)