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
This commit is contained in:
imeepos 2026-01-28 20:19:59 +08:00
parent d0b8a29698
commit b716198d4b
1 changed files with 11 additions and 5 deletions

View File

@ -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)