import { useState, useCallback } from 'react'; interface UseInfiniteScrollResult { items: T[]; loadMore: () => void; hasMore: boolean; isLoadingMore: boolean; } export function useInfiniteScroll( allItems: T[], itemsPerPage: number = 10 ): UseInfiniteScrollResult { const [currentPage, setCurrentPage] = useState(1); const [isLoadingMore, setIsLoadingMore] = useState(false); const totalPages = Math.ceil(allItems.length / itemsPerPage); const hasMore = currentPage < totalPages; const displayedItems = allItems.slice(0, currentPage * itemsPerPage); const loadMore = useCallback(() => { if (hasMore && !isLoadingMore) { setIsLoadingMore(true); // 模拟加载延迟 setTimeout(() => { setCurrentPage(prev => prev + 1); setIsLoadingMore(false); }, 500); } }, [hasMore, isLoadingMore]); return { items: displayedItems, loadMore, hasMore, isLoadingMore }; }