当前位置:首页 > VUE

点赞功能实现vue

2026-02-24 20:34:58VUE

点赞功能实现(Vue)

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

点赞功能实现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实现持久化存储。

<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 实现公告功能的方法 公告功能通常需要实现滚动展示、自动切换或固定显示的效果。以下是几种常见的实现方式: 使用 marquee 标签实现滚动公告 <template> &l…

vue实现增加

vue实现增加

实现 Vue 中的新增功能 在 Vue 中实现新增功能通常涉及数据绑定、表单处理和状态管理。以下是几种常见的实现方式: 数据绑定与列表渲染 通过 v-model 绑定表单输入,使用数组的 push…

vue实现折叠

vue实现折叠

Vue 实现折叠功能 在 Vue 中实现折叠功能可以通过多种方式完成,以下介绍几种常见的方法。 使用 v-show 或 v-if 控制显示隐藏 通过 Vue 的指令 v-show 或 v-if 可以…

实现简单vue

实现简单vue

实现一个简单的 Vue.js 框架 Vue.js 的核心功能包括数据绑定、响应式系统和虚拟 DOM。以下是一个简化版的 Vue 实现,涵盖基本功能。 数据响应式系统 使用 Object.define…

vue怎样实现mvvm

vue怎样实现mvvm

Vue 实现 MVVM 的原理 Vue 的 MVVM(Model-View-ViewModel)模式通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 MVVM 的核心机制: 数…

vue实现扫码

vue实现扫码

Vue 实现扫码功能 使用 vue-qrcode-reader 库 安装 vue-qrcode-reader 库: npm install vue-qrcode-reader 在 Vue 组件中引入…