From b716198d4b08e7d4155048ecb1150a54521c3546 Mon Sep 17 00:00:00 2001 From: imeepos Date: Wed, 28 Jan 2026 20:19:59 +0800 Subject: [PATCH] fix: use isLiked/isFavorited from API data for initial state - Get store state separately from API data - Merge strategy: store takes priority (for optimistic updates), fallback to API data - Use item.isLiked and item.isFavorited for initial state - Match the implementation pattern used in home page --- app/(tabs)/video.tsx | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/app/(tabs)/video.tsx b/app/(tabs)/video.tsx index 6966836..1ed0014 100644 --- a/app/(tabs)/video.tsx +++ b/app/(tabs)/video.tsx @@ -85,11 +85,17 @@ export const VideoItem = memo(({ item, videoHeight }: { item: TemplateDetail; vi const heartOpacity = useRef(new Animated.Value(0)).current const lastTap = useRef(0) - // 从 store 获取状态 - const liked = useTemplateLiked(item.id) ?? false - const favorited = useTemplateFavorited(item.id) ?? false - const likeCount = useTemplateLikeCount(item.id) ?? item.likeCount - const favoriteCount = useTemplateFavoriteCount(item.id) ?? item.favoriteCount + // 从 store 获取状态(用于乐观更新) + const storeLiked = useTemplateLiked(item.id) + const storeFavorited = useTemplateFavorited(item.id) + const storeLikeCount = useTemplateLikeCount(item.id) + const storeFavoriteCount = useTemplateFavoriteCount(item.id) + + // 合并策略:Store 优先(乐观更新),否则使用 API 数据 + const liked = storeLiked ?? item.isLiked ?? false + const favorited = storeFavorited ?? item.isFavorited ?? false + const likeCount = storeLikeCount ?? item.likeCount ?? 0 + const favoriteCount = storeFavoriteCount ?? item.favoriteCount ?? 0 // 使用 hooks 获取操作函数 const { like: onLike, unlike: onUnlike, loading: likeLoading } = useTemplateLike(item.id, item.likeCount)