当前位置:首页 > uni-app

uniapp评论组件

2026-02-06 01:56:20uni-app

uniapp评论组件实现方法

基础评论列表布局

使用<scroll-view>v-for渲染评论列表,结合<view>和CSS实现基础布局:

<scroll-view scroll-y style="height: 500rpx;">
  <view v-for="(item, index) in commentList" :key="index" class="comment-item">
    <image :src="item.avatar" mode="aspectFill" class="avatar"></image>
    <view class="content">
      <text class="username">{{item.username}}</text>
      <text class="text">{{item.content}}</text>
      <text class="time">{{item.createTime}}</text>
    </view>
  </view>
</scroll-view>

评论数据格式示例

推荐的数据结构包含用户信息和评论内容:

commentList: [
  {
    id: 1,
    avatar: '/static/avatar/1.jpg',
    username: '用户A',
    content: '这个产品很好用',
    createTime: '2023-05-20 10:30'
  },
  {
    id: 2,
    avatar: '/static/avatar/2.jpg',
    username: '用户B',
    content: '性价比很高,推荐购买',
    createTime: '2023-05-21 14:15'
  }
]

发表评论功能实现

底部固定输入栏组件实现:

<view class="comment-input-box">
  <input 
    v-model="commentText" 
    placeholder="请输入评论内容" 
    @confirm="submitComment"
  />
  <button @click="submitComment">发送</button>
</view>

提交评论逻辑处理:

methods: {
  submitComment() {
    if (!this.commentText.trim()) return uni.showToast({ title: '内容不能为空', icon: 'none' });

    const newComment = {
      id: Date.now(),
      avatar: '/static/avatar/default.jpg',
      username: '当前用户',
      content: this.commentText,
      createTime: this.formatTime(new Date())
    };

    this.commentList.unshift(newComment);
    this.commentText = '';
  },
  formatTime(date) {
    return `${date.getFullYear()}-${date.getMonth()+1}-${date.getDate()} ${date.getHours()}:${date.getMinutes()}`;
  }
}

样式优化建议

通过CSS增强视觉效果:

.comment-item {
  display: flex;
  padding: 20rpx;
  border-bottom: 1rpx solid #eee;
}
.avatar {
  width: 80rpx;
  height: 80rpx;
  border-radius: 50%;
}
.content {
  flex: 1;
  margin-left: 20rpx;
}
.username {
  font-weight: bold;
  margin-right: 15rpx;
}
.time {
  color: #999;
  font-size: 24rpx;
  display: block;
  margin-top: 10rpx;
}
.comment-input-box {
  position: fixed;
  bottom: 0;
  width: 100%;
  display: flex;
  padding: 20rpx;
  background: #fff;
  box-sizing: border-box;
}

高级功能扩展

实现回复功能的数据结构:

commentList: [
  {
    id: 1,
    // ...其他字段
    replies: [
      {
        id: 101,
        targetUser: '用户A',
        content: '谢谢你的回复',
        createTime: '2023-05-20 11:00'
      }
    ]
  }
]

分页加载逻辑示例:

uniapp评论组件

onReachBottom() {
  if (this.loading || !this.hasMore) return;
  this.loading = true;
  uni.showLoading({ title: '加载中' });
  this.page++;
  this.fetchComments();
},
fetchComments() {
  // 模拟API请求
  setTimeout(() => {
    const newData = [...]; // 获取新数据
    this.commentList = [...this.commentList, ...newData];
    this.hasMore = newData.length >= 10;
    this.loading = false;
    uni.hideLoading();
  }, 800);
}

标签: 组件uniapp
分享给朋友:

相关文章

vue轮播组件实现

vue轮播组件实现

Vue 轮播组件实现方法 使用第三方库(如 Swiper) 安装 Swiper 库: npm install swiper 在 Vue 组件中引入 Swiper: <template…

vue实现倒计时组件

vue实现倒计时组件

Vue 倒计时组件实现 核心思路 通过 setInterval 或 setTimeout 实现时间递减,结合 Vue 的响应式数据更新 UI。需注意组件销毁时清除定时器。 基础实现方案 模板部分…

uniapp广播

uniapp广播

全局事件通信 在UniApp中实现广播功能可通过全局事件机制完成,适用于跨页面或组件通信。使用uni.$emit、uni.$on、uni.$off等方法实现事件的触发、监听与移除。 发送广播(触发事…

uniapp真垃圾

uniapp真垃圾

关于对UniApp的评价,存在不同的声音。以下从技术特性、适用场景及常见争议点展开分析,供开发者参考: 技术特性与优势 UniApp基于Vue.js框架,支持多端编译(微信小程序、H5、App等),…

uniapp前端渲染

uniapp前端渲染

uniapp前端渲染的基本原理 uniapp基于Vue.js框架,采用了一套代码多端运行的机制。前端渲染主要通过Vue的虚拟DOM技术实现,在不同平台(H5、小程序、App等)上会编译为对应平台的渲染…

uniapp怎么授权

uniapp怎么授权

uniapp 授权流程 uniapp 的授权流程通常涉及获取用户权限(如地理位置、摄像头、麦克风等)或第三方平台授权(如微信、支付宝登录)。以下是常见授权场景的实现方法: 获取用户设备权限(如相机、…