当前位置:首页 > 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。

uniapp评论区

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 实现图片上传,表情需预先定义表情库。

uniapp评论区

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

性能优化建议

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

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

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

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

样式设计示例

.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多环境配置

多环境配置的必要性 在UniApp开发中,多环境配置能有效区分开发、测试、生产等不同环境的API地址、密钥等参数,避免手动修改代码导致的错误。 创建环境配置文件 在项目根目录下创建env.js或co…

uniapp支付功能怎么实现

uniapp支付功能怎么实现

uniapp支付功能实现方法 准备工作 注册微信支付、支付宝等平台的开发者账号,获取必要的商户ID(mch_id)、API密钥(key)、应用ID(appid)等信息。确保项目已配置好相关支付SDK。…

uniapp开发电视应用

uniapp开发电视应用

开发环境准备 确保已安装HBuilderX最新版本,这是uniapp官方推荐的开发工具。安装Node.js环境,用于依赖管理和打包构建。准备Android Studio或Xcode用于调试和打包TV应…

uniapp使用axios无法请求

uniapp使用axios无法请求

uniapp中使用axios请求问题解决方案 在uniapp中使用axios可能会遇到跨域、请求失败或兼容性问题。以下是常见原因及解决方法: 检查axios安装与引入 确保已正确安装axios:…

uniapp实现标题栏渐变

uniapp实现标题栏渐变

实现标题栏渐变的方法 在UniApp中实现标题栏渐变效果,可以通过修改页面的导航栏样式或使用自定义导航栏来实现。以下是几种常见的方法: 方法一:使用原生导航栏渐变 通过修改pages.json中的…

uniapp 美颜

uniapp 美颜

uniapp 美颜实现方法 在uniapp中实现美颜功能可以通过多种方式完成,以下是一些常见的方法: 使用原生插件 uniapp支持调用原生插件实现美颜效果,适用于对性能要求较高的场景。需要开发原生…