当前位置:首页 > VUE

vue实现列表点赞

2026-02-20 16:55:25VUE

实现思路

在Vue中实现列表点赞功能,主要涉及数据绑定、事件处理和状态更新。通常需要为列表中的每一项维护一个点赞状态,并通过点击事件触发状态变更。

基础实现

准备一个包含点赞状态的列表数据,使用v-for渲染列表,并为每个项绑定点击事件。

<template>
  <div>
    <ul>
      <li v-for="(item, index) in items" :key="index">
        {{ item.content }}
        <button @click="toggleLike(index)">
          {{ item.liked ? '取消点赞' : '点赞' }} ({{ item.likes }})
        </button>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { content: '内容1', likes: 10, liked: false },
        { content: '内容2', likes: 5, liked: true },
        { content: '内容3', likes: 8, liked: false }
      ]
    }
  },
  methods: {
    toggleLike(index) {
      const item = this.items[index]
      item.liked = !item.liked
      item.likes += item.liked ? 1 : -1
    }
  }
}
</script>

优化实现

添加动画效果提升用户体验,使用Vue的过渡组件实现点赞动画。

<template>
  <div>
    <ul>
      <li v-for="(item, index) in items" :key="index">
        {{ item.content }}
        <button @click="toggleLike(index)">
          <transition name="fade" mode="out-in">
            <span :key="item.liked">
              {{ item.liked ? '取消点赞' : '点赞' }}
            </span>
          </transition>
          ({{ item.likes }})
        </button>
      </li>
    </ul>
  </div>
</template>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.3s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

服务端交互

实际项目中通常需要与后端API交互,保存点赞状态到数据库。

methods: {
  async toggleLike(index) {
    const item = this.items[index]
    const newLikedState = !item.liked

    try {
      const response = await axios.post('/api/like', {
        itemId: item.id,
        liked: newLikedState
      })

      item.liked = newLikedState
      item.likes = response.data.likes
    } catch (error) {
      console.error('点赞操作失败', error)
    }
  }
}

防抖处理

为防止用户快速多次点击,可以添加防抖功能。

vue实现列表点赞

import { debounce } from 'lodash'

methods: {
  toggleLike: debounce(function(index) {
    const item = this.items[index]
    item.liked = !item.liked
    item.likes += item.liked ? 1 : -1
  }, 300)
}

标签: 列表vue
分享给朋友:

相关文章

vue vnode实现

vue vnode实现

Vue VNode 实现原理 VNode(Virtual Node)是 Vue 的核心概念之一,用于描述真实 DOM 的轻量级虚拟表示。VNode 的实现涉及以下关键点: VNode 的基本结构 V…

vue实现webapp

vue实现webapp

Vue 实现 WebApp 的基本步骤 环境准备 确保已安装 Node.js 和 npm/yarn。通过 Vue CLI 或 Vite 创建项目: npm install -g @vue/cli v…

vue实现快手

vue实现快手

Vue 实现类似快手的功能 Vue.js 是一个渐进式 JavaScript 框架,适合构建复杂的单页应用。要实现类似快手的功能,可以结合 Vue 和相关技术栈进行开发。 核心功能模块 视频流展示…

vue 分页 实现

vue 分页 实现

Vue 分页实现方法 使用第三方库(如 Element UI) Element UI 提供了现成的分页组件 el-pagination,适合快速集成。 安装 Element UI: npm ins…

vue分页实现

vue分页实现

实现Vue分页的几种方法 使用Element UI的分页组件 安装Element UI库后,可以直接使用其分页组件。以下是一个基本示例: <template> <div>…

vue实现烟花

vue实现烟花

Vue 实现烟花效果 在 Vue 中实现烟花效果可以通过结合 CSS 动画和 JavaScript 动态生成烟花元素。以下是具体实现方法: 动态生成烟花元素 通过 Vue 的 v-for 动态生成烟…