当前位置:首页 > uni-app

uniapp评论区

2026-02-06 02:46:42uni-app

uniapp 评论区实现方法

基础评论区结构 使用 scroll-view 组件实现滚动列表,搭配 v-for 渲染评论项。每条评论包含用户头像、昵称、内容和时间戳。

<template>
  <scroll-view scroll-y class="comment-container">
    <view v-for="(item,index) in comments" :key="index" class="comment-item">
      <image :src="item.avatar" mode="aspectFill"></image>
      <view class="content">
        <text class="username">{{item.nickname}}</text>
        <text class="text">{{item.content}}</text>
        <text class="time">{{item.time}}</text>
      </view>
    </view>
  </scroll-view>
</template>

数据加载与分页 通过 onReachBottom 生命周期实现分页加载,配合 loading 状态防止重复请求。

data() {
  return {
    comments: [],
    page: 1,
    loading: false
  }
},
methods: {
  loadComments() {
    if(this.loading) return;
    this.loading = true;
    uni.request({
      url: 'API_URL',
      data: { page: this.page },
      success: (res) => {
        this.comments = [...this.comments, ...res.data.list]
        this.page++
      },
      complete: () => this.loading = false
    })
  }
}

发表评论功能 底部固定输入框结合 textarea 和按钮,提交时验证内容非空并调用接口。

<view class="input-area">
  <textarea v-model="commentText" placeholder="说点什么..."></textarea>
  <button @click="submitComment">发送</button>
</view>
methods: {
  submitComment() {
    if(!this.commentText.trim()) return uni.showToast({title:'内容不能为空'});
    uni.request({
      url: 'POST_API_URL',
      method: 'POST',
      data: { content: this.commentText },
      success: () => {
        this.commentText = '';
        this.page = 1;
        this.comments = [];
        this.loadComments();
      }
    })
  }
}

高级功能实现

回复功能设计 点击评论项时显示回复输入框,记录当前回复的评论ID。

data() {
  return {
    replyTo: null,
    replyText: ''
  }
},
methods: {
  showReply(commentId) {
    this.replyTo = commentId;
  },
  submitReply() {
    // 提交时携带this.replyTo作为父评论ID
  }
}

点赞与互动 为每条评论添加点赞按钮,记录用户互动状态。

<view class="actions">
  <text @click="likeComment(item.id)">{{item.likeCount}}</text>
  <text @click="showReply(item.id)">回复</text>
</view>

图片/表情支持 使用 uni.chooseImage 实现图片上传,表情需预先定义表情库。

chooseImage() {
  uni.chooseImage({
    count: 3,
    success: (res) => {
      this.uploadImages(res.tempFilePaths)
    }
  })
}

性能优化建议

图片懒加载 使用 lazy-load 属性延迟加载非可视区域图片

<image lazy-load :src="item.avatar"></image>

数据缓存策略 对已加载的评论数据使用 uni.setStorage 进行本地缓存,下次打开优先显示缓存内容

虚拟列表优化 超长列表建议使用 recycle-list 组件替代常规渲染,大幅减少内存占用

uniapp评论区

样式设计示例

.comment-container {
  height: 70vh;
  padding: 20rpx;
}
.comment-item {
  display: flex;
  margin-bottom: 30rpx;
}
.comment-item image {
  width: 80rpx;
  height: 80rpx;
  border-radius: 50%;
}
.input-area {
  position: fixed;
  bottom: 0;
  width: 100%;
  background: #fff;
  padding: 20rpx;
  box-sizing: border-box;
}

标签: uniapp
分享给朋友:

相关文章

uniapp部署到服务器

uniapp部署到服务器

部署准备 确保本地开发环境已完成项目构建,生成静态文件(H5端为/dist/build/h5目录)。检查服务器环境是否安装Nginx/Apache等Web服务软件,并配置好域名解析。 上传文件 通过…

uniapp组件

uniapp组件

uniapp组件基础概念 uniapp的组件系统基于Vue.js,支持跨平台开发(H5、小程序、App等)。组件分为内置基础组件(如<view>、<button>)和自定义组件…

任务 uniapp

任务 uniapp

uniapp 简介 Uniapp 是一款基于 Vue.js 的跨平台开发框架,支持一次开发,多端发布(如微信小程序、H5、App、快应用等)。其核心优势在于代码复用率高,开发者可以通过一套代码适配多个…

丸子uniapp

丸子uniapp

丸子UniApp简介 丸子UniApp是一个基于UniApp框架开发的移动应用解决方案,通常用于快速构建跨平台应用(如微信小程序、H5、Android/iOS等)。其核心特点是利用UniApp的“一次…

uniapp推荐系统

uniapp推荐系统

基于UniApp的推荐系统实现方案 UniApp作为跨平台开发框架,可通过以下方式实现推荐系统功能: 数据驱动推荐算法 通过用户行为数据(浏览、收藏、购买等)构建用户画像,采用协同过滤算法或内容相似…

uniapp移植app

uniapp移植app

理解UniApp移植的基本概念 UniApp是一个基于Vue.js的跨平台开发框架,支持一次开发多端部署(包括iOS、Android、Web等)。移植现有App到UniApp通常指将原生或其他框架开发…