当前位置:首页 > VUE

点赞功能实现vue

2026-02-24 20:34:58VUE

点赞功能实现(Vue)

在Vue中实现点赞功能,通常需要结合前端交互和后端数据存储。以下是两种常见实现方式:

纯前端实现(无持久化)

适用于无需保存点赞状态的场景,如临时交互。

<template>
  <button @click="toggleLike">
    {{ isLiked ? '取消点赞' : '点赞' }} ({{ likeCount }})
  </button>
</template>

<script>
export default {
  data() {
    return {
      isLiked: false,
      likeCount: 42
    }
  },
  methods: {
    toggleLike() {
      this.isLiked = !this.isLiked
      this.likeCount += this.isLiked ? 1 : -1
    }
  }
}
</script>

前后端交互实现

需要配合后端API实现持久化存储。

点赞功能实现vue

<template>
  <button @click="handleLike" :disabled="loading">
    {{ data.is_liked ? '取消点赞' : '点赞' }} ({{ data.like_count }})
  </button>
</template>

<script>
import axios from 'axios'

export default {
  props: ['postId'],
  data() {
    return {
      loading: false,
      data: {
        is_liked: false,
        like_count: 0
      }
    }
  },
  created() {
    this.fetchLikeStatus()
  },
  methods: {
    async fetchLikeStatus() {
      const res = await axios.get(`/api/posts/${this.postId}/likes`)
      this.data = res.data
    },
    async handleLike() {
      this.loading = true
      try {
        const action = this.data.is_liked ? 'delete' : 'post'
        await axios[action](`/api/posts/${this.postId}/likes`)
        this.data.is_liked = !this.data.is_liked
        this.data.like_count += this.data.is_liked ? 1 : -1
      } finally {
        this.loading = false
      }
    }
  }
}
</script>

优化建议

  1. 添加防抖处理防止快速重复点击
  2. 使用Vuex管理全局点赞状态
  3. 添加动画效果提升用户体验
  4. 考虑实现本地缓存减少API请求

后端接口示例

// Express.js示例
router.post('/posts/:id/likes', auth, async (req, res) => {
  const post = await Post.findByPk(req.params.id)
  await post.addLike(req.user.id)
  res.json({ is_liked: true, like_count: post.likeCount })
})

router.delete('/posts/:id/likes', auth, async (req, res) => {
  const post = await Post.findByPk(req.params.id)
  await post.removeLike(req.user.id)
  res.json({ is_liked: false, like_count: post.likeCount })
})

实现时需根据具体业务需求调整逻辑,如限制用户点赞次数、防止刷赞等。

标签: 功能vue
分享给朋友:

相关文章

vue无限菜单怎么实现

vue无限菜单怎么实现

实现 Vue 无限菜单的方法 递归组件实现嵌套菜单 使用 Vue 的递归组件特性可以轻松实现无限级嵌套菜单。通过组件调用自身的方式处理嵌套数据。 <template> <ul&…

vue实现级联

vue实现级联

Vue 实现级联选择器的方法 级联选择器(Cascader)是常见的表单组件,用于处理多层级联动数据选择(如省市区选择)。以下是几种实现方式: 基于 Element UI 的 el-cascader…

vue插槽实现

vue插槽实现

插槽的基本概念 Vue插槽(Slot)是一种内容分发机制,允许父组件向子组件传递模板片段,子组件通过<slot>标签定义接收位置。插槽的核心作用是增强组件的灵活性和复用性。 默认插槽 子…

vue实现popup

vue实现popup

Vue 实现 Popup 弹窗 使用 Vue 原生组件 创建一个基本的 Vue 组件作为弹窗,通过 v-if 或 v-show 控制显示隐藏。 <template> <div&…

vue 实现轮播

vue 实现轮播

Vue 实现轮播的方法 使用第三方库(如 Swiper) 安装 Swiper 库: npm install swiper 在 Vue 组件中引入 Swiper: <template&…

vue 实现全屏

vue 实现全屏

Vue 实现全屏功能 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 完成。以下是一个完整的实现方案: 安装依赖(可选) 如果需要跨浏览器兼容性更好,可以安装 scre…