'use client'; import { useCallback,useEffect, useState } from 'react'; import { useEnableComments } from '@/hooks/useEnableComments'; import ScrollableRow from '@/components/ScrollableRow'; import VideoCard from '@/components/VideoCard'; import { getRecommendationCache, recommendationCacheKeys, setRecommendationCache, } from '@/lib/recommendations/cache'; interface DoubanRecommendation { doubanId: string; title: string; poster: string; rating: string; } interface DoubanRecommendationsProps { doubanId: number; } export default function DoubanRecommendations({ doubanId }: DoubanRecommendationsProps) { const [recommendations, setRecommendations] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const enableComments = useEnableComments(); const fetchRecommendations = useCallback(async () => { try { console.log('正在获取推荐'); setLoading(true); setError(null); const cacheKey = recommendationCacheKeys.doubanRecommendations(doubanId); const cached = getRecommendationCache(cacheKey); if (cached) { console.log('使用缓存的推荐数据'); setRecommendations(cached); setLoading(false); return; } const response = await fetch( `/api/douban-recommendations?id=${doubanId}` ); if (!response.ok) { throw new Error('获取推荐失败'); } const result = await response.json(); console.log('获取到推荐:', result.recommendations); const recommendationsData = result.recommendations || []; setRecommendations(recommendationsData); setRecommendationCache(cacheKey, recommendationsData); } catch (err) { console.error('获取推荐失败:', err); setError(err instanceof Error ? err.message : '获取推荐失败'); } finally { setLoading(false); } }, [doubanId]); useEffect(() => { if (enableComments && doubanId) { fetchRecommendations(); } }, [enableComments, doubanId, fetchRecommendations]); if (!enableComments) { return null; } if (loading) { return (
); } if (error) { return (
{error}
); } if (recommendations.length === 0) { return null; } return ( {recommendations.map((rec) => (
))}
); }