/** * templateSocialStore 使用示例 * * 这个文件展示了如何使用 templateSocialStore 来管理模板的点赞和收藏状态 */ import { useTemplateSocialStore } from './templateSocialStore' // 示例 1: 基本使用 export function Example1_BasicUsage() { const { isLiked, setLiked } = useTemplateSocialStore() const handleToggleLike = (templateId: string) => { const currentState = isLiked(templateId) setLiked(templateId, !currentState) } return { handleToggleLike } } // 示例 2: 批量更新状态(例如从 API 获取后) export function Example2_BatchUpdate() { const { setLikedStates, setFavoritedStates } = useTemplateSocialStore() // 假设从 API 获取了模板列表及其社交状态 const updateFromAPI = (apiResponse: { templates: Array<{ id: string; liked: boolean; favorited: boolean }> }) => { const likedStates: Record = {} const favoritedStates: Record = {} apiResponse.templates.forEach((template) => { likedStates[template.id] = template.liked favoritedStates[template.id] = template.favorited }) // 批量更新 setLikedStates(likedStates) setFavoritedStates(favoritedStates) } return { updateFromAPI } } // 示例 3: 在 React 组件中使用 export function Example3_ComponentUsage() { const templateId = 'template-123' // 获取状态和方法 const liked = useTemplateSocialStore((state) => state.isLiked(templateId)) const favorited = useTemplateSocialStore((state) => state.isFavorited(templateId)) const setLiked = useTemplateSocialStore((state) => state.setLiked) const setFavorited = useTemplateSocialStore((state) => state.setFavorited) const handleLike = () => { setLiked(templateId, !liked) } const handleFavorite = () => { setFavorited(templateId, !favorited) } return { liked, favorited, handleLike, handleFavorite, } } // 示例 4: 使用选择器优化性能 export function Example4_SelectorOptimization() { const templateId = 'template-123' // 只订阅需要的状态,避免不必要的重渲染 const liked = useTemplateSocialStore((state) => state.likedMap[templateId]) const favorited = useTemplateSocialStore((state) => state.favoritedMap[templateId]) return { liked, favorited } } // 示例 5: 清空状态(例如用户登出时) export function Example5_ClearState() { const clear = useTemplateSocialStore((state) => state.clear) const handleLogout = () => { // 清空所有社交状态 clear() // ... 其他登出逻辑 } return { handleLogout } } // 示例 6: 结合 API 调用 export function Example6_WithAPI() { const { setLiked, isLiked } = useTemplateSocialStore() const handleLikeWithAPI = async (templateId: string) => { const currentState = isLiked(templateId) try { // 乐观更新:立即更新 UI setLiked(templateId, !currentState) // 调用 API // await api.likeTemplate(templateId) // 如果 API 调用失败,回滚状态 // catch (error) { // setLiked(templateId, currentState) // throw error // } } catch (error) { console.error('Failed to like template:', error) } } return { handleLikeWithAPI } } // 示例 7: 获取所有点赞的模板 export function Example7_GetAllLiked() { const likedMap = useTemplateSocialStore((state) => state.likedMap) const getLikedTemplateIds = (): string[] => { return Object.keys(likedMap).filter((id) => likedMap[id]) } const likedCount = getLikedTemplateIds().length return { getLikedTemplateIds, likedCount } } // 示例 8: 重置特定模板的状态 export function Example8_ResetTemplate() { const { setLiked, setFavorited } = useTemplateSocialStore() const resetTemplateState = (templateId: string) => { setLiked(templateId, false) setFavorited(templateId, false) } return { resetTemplateState } }