当前位置:首页 > uni-app

uniapp点赞源码

2026-02-06 10:45:50uni-app

uniapp点赞功能实现

前端页面代码(Vue模板部分)

<template>
  <view class="like-container">
    <view @click="handleLike" :class="['like-btn', isLiked ? 'liked' : '']">
      <uni-icons :type="isLiked ? 'heart-filled' : 'heart'" size="24" color="#ff5a5f"></uni-icons>
      <text>{{ likeCount }}</text>
    </view>
  </view>
</template>

JavaScript逻辑部分

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

      // 实际项目中这里需要调用API接口
      uni.request({
        url: 'https://your-api.com/like',
        method: 'POST',
        data: {
          action: this.isLiked ? 'like' : 'unlike',
          item_id: '123' // 替换为实际项目ID
        },
        success: (res) => {
          console.log(res.data)
        }
      })
    }
  }
}
</script>

CSS样式部分

<style>
.like-btn {
  display: flex;
  align-items: center;
  padding: 5px 10px;
  border-radius: 20px;
  background-color: #f8f8f8;
}

.like-btn.liked {
  background-color: #fff0f0;
}

.like-btn text {
  margin-left: 5px;
  color: #666;
}
</style>

后端接口实现(Node.js示例)

Express路由处理

const express = require('express')
const router = express.Router()

// 模拟数据库存储
let likesDB = {}

router.post('/like', (req, res) => {
  const { action, item_id } = req.body

  if (!likesDB[item_id]) {
    likesDB[item_id] = 0
  }

  if (action === 'like') {
    likesDB[item_id] += 1
  } else {
    likesDB[item_id] = Math.max(0, likesDB[item_id] - 1)
  }

  res.json({
    code: 200,
    data: {
      count: likesDB[item_id]
    }
  })
})

数据库设计(MySQL示例)

CREATE TABLE `likes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL COMMENT '用户ID',
  `item_id` int(11) NOT NULL COMMENT '内容ID',
  `item_type` varchar(20) NOT NULL COMMENT '内容类型',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_item` (`user_id`,`item_id`,`item_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

优化建议

防抖处理

let timer = null
handleLike() {
  clearTimeout(timer)
  timer = setTimeout(() => {
    // 原有逻辑
  }, 300)
}

本地缓存

uniapp点赞源码

onLoad() {
  const cachedLike = uni.getStorageSync('like_status_123')
  if (cachedLike) {
    this.isLiked = cachedLike.status
    this.likeCount = cachedLike.count
  }
}

// 在请求成功后
uni.setStorageSync('like_status_123', {
  status: this.isLiked,
  count: this.likeCount
})

以上代码提供了uniapp实现点赞功能的完整示例,包含前端交互、后端接口和数据库设计。实际项目中需要根据具体需求调整参数和逻辑。

标签: 源码uniapp
分享给朋友:

相关文章

uniapp实名认证

uniapp实名认证

uniapp实名认证实现方法 使用uniCloud实名认证插件 uniapp官方提供了uniCloud的实名认证插件,可快速集成到项目中。插件支持身份证识别、活体检测等功能,需在uniCloud控制台…

uniapp前端页面

uniapp前端页面

Uniapp 前端页面开发指南 Uniapp 是一个基于 Vue.js 的跨平台开发框架,支持一次开发,多端部署(H5、小程序、App等)。以下是开发 Uniapp 前端页面的关键方法和注意事项。…

uniapp切片

uniapp切片

uniapp 切片实现方法 在 uniapp 中实现切片功能通常指的是对图片或数据进行分割处理。以下是几种常见的切片实现方式: 图片切片展示 通过 CSS 和 JavaScript 实现图片的网格化…

uniapp判断手机定位是否开启

uniapp判断手机定位是否开启

判断手机定位是否开启的方法 在UniApp中判断手机定位是否开启,可以通过调用原生API或使用第三方插件实现。以下是几种常见的方法: 使用uni.getLocation检测定位状态 通过调用uni.…

如何读react源码

如何读react源码

理解React源码的结构 React源码托管在GitHub上,主要分为几个核心模块:react、react-dom、react-reconciler等。react包包含核心API和组件逻辑,react…

uniapp关闭广告

uniapp关闭广告

关闭广告的方法 在UniApp中关闭广告通常涉及以下几个方法,具体操作取决于广告的类型和集成方式。 移除广告模块 检查项目中是否集成了广告SDK或相关组件,如ad、ad-draw等。在pages.j…