"use client"; import Link from "next/link"; import { useState } from "react"; type FavoriteButtonProps = { slug: string; initialFavorited: boolean; initialCount: number; canFavorite: boolean; }; export function FavoriteButton({ slug, initialFavorited, initialCount, canFavorite }: FavoriteButtonProps) { const [favorited, setFavorited] = useState(initialFavorited); const [count, setCount] = useState(initialCount); const [loading, setLoading] = useState(false); async function handleToggle() { if (loading) return; setLoading(true); try { const res = await fetch(`/api/posts/${slug}/favorite`, { method: favorited ? "DELETE" : "POST" }); const data = await res.json().catch(() => ({})); if (!res.ok) { alert(data.error || "收藏操作失败"); return; } setFavorited(Boolean(data.isFavorited)); setCount(typeof data.favoriteCount === "number" ? data.favoriteCount : count); } finally { setLoading(false); } } if (!canFavorite) { return ( 登录后收藏 ); } return ( ); }