comment-item.tsx

comment-item.tsx

基本信息

  • 类型: React Client Component
  • 路径: ./src/components/comments/comment-item.tsx

功能描述

单个评论项组件,展示评论内容、作者信息、投票按钮、操作菜单等。支持嵌套回复显示、投票、回复、删除、标记等功能。

Props 接口

Comment

属性类型描述
idstring评论唯一标识
contentstring评论内容
createdAtstring创建时间
updatedAtstring更新时间
parentId`string \null`父评论ID
flaggedboolean是否被标记
authorobject作者信息
scorenumber评论得分
userVotenumber用户投票状态
replyCountnumber回复数量

CommentItemProps

属性类型描述
commentComment评论数据
promptIdstring提示词ID
currentUserId`string \undefined`当前用户ID
isAdminboolean是否为管理员
isLoggedInboolean是否已登录
localestring语言区域
repliesComment[]直接回复列表
allCommentsComment[]所有评论列表(用于递归回复)
onCommentAdded(comment: Comment) => void添加评论回调
onCommentDeleted(commentId: string) => void删除评论回调
onCommentUpdated(comment: Comment) => void更新评论回调
depthnumber嵌套深度(默认 0)

依赖导入

  • next/link - Next.js 链接组件
  • next-intl - 国际化翻译
  • @/lib/date - 日期格式化
  • @/lib/utils - 工具函数
  • lucide-react - 图标库
  • @/components/ui/avatar - 头像组件
  • @/components/ui/button - 按钮组件
  • @/components/ui/dropdown-menu - 下拉菜单组件
  • @/components/ui/alert-dialog - 确认对话框组件
  • sonner - 通知提示
  • ./comment-form - 评论表单组件

主要功能

  • 显示评论作者头像和用户名
  • 显示管理员身份标识
  • 显示评论创建时间(相对时间)
  • 显示评论内容(支持自动链接URL)
  • 投票功能(点赞/踩),未登录提示
  • 回复功能(深度限制为5层)
  • 删除功能(作者或管理员可操作)
  • 标记功能(仅管理员可操作)
  • 被踩的评论降低透明度
  • 被标记的评论显示红色背景
  • 嵌套回复的展开/折叠
  • 深度超过0时显示左侧缩进线

工具函数

autoLinkText

将评论内容中的URL自动转换为可点击的链接,添加安全属性。

状态管理

状态类型描述
isReplyingboolean是否显示回复表单
isVotingboolean投票操作加载状态
showDeleteDialogboolean删除确认对话框显示状态
isDeletingboolean删除操作加载状态
isFlaggingboolean标记操作加载状态
localScorenumber本地评论得分(实时反馈)
localUserVotenumber本地用户投票状态
localFlaggedboolean本地标记状态
isCollapsedboolean回复折叠状态
← 返回目录