comment-form.tsx

comment-form.tsx

基本信息

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

功能描述

评论表单组件,用于发表评论或回复。支持未登录用户引导登录,包含文本输入框和提交按钮。

Props 接口

CommentFormProps

属性类型描述
promptIdstring提示词ID
parentId`string \undefined`父评论ID(用于回复)
isLoggedInboolean用户是否已登录
onCommentAdded(comment: Comment) => void评论添加成功回调
onCancel`() => void \undefined`取消回调(可选)
placeholder`string \undefined`文本框占位符(可选)
autoFocusboolean是否自动聚焦(默认 false)

Comment(返回数据)

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

依赖导入

  • next/link - Next.js 链接组件
  • next-intl - 国际化翻译
  • lucide-react - 图标库(Loader2, LogIn)
  • @/components/ui/button - 按钮组件
  • @/components/ui/textarea - 文本域组件
  • @/components/ui/dialog - 对话框组件
  • sonner - 通知提示
  • @/lib/analytics - 分析统计

主要功能

  • 提供多行文本输入框输入评论内容
  • 支持自动聚焦(用于回复场景)
  • 自定义占位符文本
  • 提交按钮根据是否有 parentId 显示"回复"或"发表评论"
  • 空内容时禁用提交按钮
  • 提交时显示加载状态
  • 未登录用户点击提交时弹出登录引导对话框
  • 支持取消操作(如果提供 onCancel 回调)
  • 发布成功后清空输入框并触发回调
  • 触发评论发布的分析事件

状态管理

状态类型描述
contentstring评论内容
isLoadingboolean提交加载状态
showLoginModalboolean登录引导弹窗显示状态
← 返回目录