vue3论坛 评论和回复

经过大佬指点,又有了优化。

上一篇文章(vue3论坛 评论和回复)中,写到二级评论是用userCommentId判断一下在渲染,这样的话其实会浪费资源。

新方法:一级评论加一个children(replyList)

let commentList = reactive<Comment[]>(
  [
    {
      itemId: 这个用来区别帖子,
      createdAt: 创建时间,
      userInfo: {这里封装一下用来存放一级评论用户的信息
        avatarUrl: 头像,
        nickname: 名字,
        userId: 
      },
      userCommentId: 评论Id,
      replyList:[] 存评论
      userId: ,
      isDel: 是否删除,
      content: 内容,
      updatedAt: 回复时间,
      showReply: 展示回复框
    },
   
  ]
);

这样的话后面就不用判断userCommentId可以直接渲染,肯定是避免了资源的浪费。

从后端角度来说也优化了,因为之前回复从后端接收数据的时候需要userCommentId,现在不用判断这个,那后端就可以不用传userCommentId字段,感谢大佬。

  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于 Vue3 的评论回复功能的示例代码: ```vue <template> <div> <h2>评论</h2> <textarea v-model="comment" placeholder="请输入评论"></textarea> <button @click="submitComment">提交评论</button> <hr> <h3>评论列表</h3> <ul> <li v-for="(item, index) in comments" :key="index"> {{ item.content }} <button @click="showReplyBox(index)">回复</button> <div v-if="item.showReplyBox"> <textarea v-model="item.replyContent" placeholder="请输入回复"></textarea> <button @click="submitReply(index)">提交回复</button> </div> <ul> <li v-for="(reply, replyIndex) in item.replies" :key="replyIndex"> {{ reply.content }} </li> </ul> </li> </ul> </div> </template> <script> import { reactive } from 'vue' export default { setup() { const state = reactive({ comment: '', comments: [ { content: '这是评论1', showReplyBox: false, replyContent: '', replies: [] }, { content: '这是评论2', showReplyBox: false, replyContent: '', replies: [] }, { content: '这是评论3', showReplyBox: false, replyContent: '', replies: [] }, ], }) // 显示回复框 const showReplyBox = (index) => { state.comments[index].showReplyBox = true } // 提交评论 const submitComment = () => { if (!state.comment.trim()) { alert('请输入评论') return } state.comments.push({ content: state.comment, showReplyBox: false, replyContent: '', replies: [] }) state.comment = '' } // 提交回复 const submitReply = (index) => { if (!state.comments[index].replyContent.trim()) { alert('请输入回复') return } state.comments[index].replies.push({ content: state.comments[index].replyContent }) state.comments[index].replyContent = '' state.comments[index].showReplyBox = false } return { comment: state.comment, comments: state.comments, showReplyBox, submitComment, submitReply, } }, } </script> ``` 在这个示例中,我们使用了 Vue3 提供的 `reactive` 函数来创建响应式数据。评论回复的内容都存储在 `comments` 数组中,每个评论对象中包含一个 `showReplyBox` 属性,用于控制回复框的显示状态,以及一个 `replies` 数组,用于存储回复内容。 用户输入评论回复后,点击提交按钮即可将其添加到相应的评论对象或回复数组中。同时,为了方便用户回复,我们在每个评论对象中添加了一个按钮,点击后会显示回复框。 需要注意的是,为了防止用户输入空内容,我们在提交评论回复前都进行了输入内容的判断。 这只是一个简单的示例代码,实际应用中可能还需要考虑更多的功能和细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值