vue3 2.实现一个评论列表:展示已发表的评论和评论人; 3.实现用户发表评论功能:包含评论人,评论内容和发表评论按钮; 4.实现评论列表实时更新; 5.实现防误触功能的发表评论按钮;
时间: 2024-11-22 20:44:13 浏览: 4
在 Vue3 中,要实现上述功能,可以按照以下步骤操作:
1. **创建组件结构**:
- 创建两个组件:`CommentItem.vue` 显示单条评论,包含评论人、评论内容和时间;`CommentList.vue` 列出所有评论并实时刷新。
```html
<!-- CommentItem.vue -->
<template>
<div class="comment-item">
<h3>{{ comment.user }}</h3>
<p>{{ comment.content }}</p>
<small>发布于 {{ comment发布时间 }}</small>
</div>
</template>
<script setup>
import { ref } from 'vue';
export default {
props: {
comment: {
type: Object,
required: true
}
},
};
</script>
```
```html
<!-- CommentList.vue -->
<template>
<div>
<ul v-for="(comment, index) in comments" :key="index">
<CommentItem :comment="comment" />
</ul>
<button @click.prevent="submitComment">发表评论</button>
</div>
</template>
<script setup>
import { ref, watchEffect } from 'vue';
import CommentItem from '@/components/CommentItem.vue';
const comments = ref([]);
let newComment = '';
function submitComment() {
// 防止误触逻辑(如短暂禁用或确认提示)
if (!newComment.trim()) return;
// 发送 API 请求,假设成功后添加新评论到数组
const response = fetch('/api/comments', { method: 'POST', body: JSON.stringify({ user: '用户输入', content: newComment }) });
response.then((res) => res.json()).then((data) => {
comments.value.push(data);
newComment = '';
});
}
watchEffect(() => {
// 实时获取并更新评论列表
// 可以使用 WebSocket 或者轮询等技术,这里仅做示例,假设有一个`getComments`函数能获取最新的评论
const latestComments = getComments();
comments.value = latestComments;
});
</script>
</code>
2. **防止误触逻辑**:
- 在 `submitComment` 函数内部检查 `newComment` 是否为空或者是否满足其他条件(如字符数限制),只有当输入有效时才发送请求。
阅读全文