UI Design System
build dev

Message

全局短时反馈操作结果。中文惯用名:全局消息;与 AI 会话组件 ChatMessage 名称与职责均不同。
稳定本期新增已接入

元信息

字段值
规范 IDcomponent.message
名称Message
二级分类反馈(feedback)
用途全局短时反馈操作结果
描述中文惯用名:全局消息;与 AI 会话组件 ChatMessage 名称与职责均不同。

预览

静态结构:Message 是声明式全局短反馈触发器,自身只渲染一个 hidden 标记节点 <div data-slot="message" hidden>(通用 class / style 正常挂载其上)。content 引用变化且为非空字符串时(含首次挂载),经模块级共享 ToastManager 的命令式 toast() 发一条全局 toast——右上角视口(fixed top-4 right-4)弹出带语义色条的卡片(variant 映射 border-l-success / destructive / info / warning),附关闭按钮,按 duration 自动消失。

DSL 结构

DslNode
{
  "type": "Message",
  "props": {
    "content": "保存成功",
    "variant": "success",
    "duration": 3000
  }
}

何时用

何时使用

  • 操作完成后的全局短时反馈:保存成功、提交失败、网络异常等,用户无需处理即可自动消失。
  • 反馈轻量、不打断当前流程(非阻断、瞬时),文案一句话说清结果。
  • 在 DSL 中以声明方式触发:把 state 中的反馈文案绑定给 content,赋值即弹出。

何时不用

  • 需要标题 + 正文、停留更久的富通知:使用 Notification。
  • 需要持续驻留在内容上下文中的提示:使用 Alert(就地持续展示)。
  • 需要用户确认后才能继续的操作:使用 Popconfirm 或 Dialog,Message 无交互。
  • 会话界面中的用户 / 助手消息:使用 AI 分类的 ChatMessage——本组件是全局操作反馈,二者不是同一资产。

变体

变体视觉形态适用场景
info 信息(默认)info 语义色条 toast中性操作结果(如「已同步」);variant 缺省即 info
success 成功success 语义色条 toast操作成功反馈(保存、提交、创建完成)
error 错误destructive 语义色条 toast操作失败反馈(提交失败、请求异常)
warning 警告warning 语义色条 toast需要留意但不阻断的提示(如「部分字段未保存」)

API 属性

属性类型默认值说明
contentstring—反馈文案:变为非空字符串时(含首次挂载)发一条全局短 toast;触发语义仅依赖 content 引用,variant / duration 变化不重发
variant`'success''error''info'
durationnumber—自动关闭时长(ms),透传 toast timeout;0 表示不自动关闭
classNamestring—通用:标记节点 class
styleCSSProperties—通用:标记节点内联样式

使用规范

  • 页面必须挂载 Sonner(全局 toast 挂载点),Message 发出的 toast 才可见;二者共用模块级 ToastManager。
  • 这是与命令式 message / toast 动作并存的声明式触发方式:把「待反馈文案」建模为 state,赋值触发、清空(空串)不触发。
  • 触发仅依赖 content 引用变化:相同文案重复赋值(引用不变)不会重发;variant / duration 调整不会补发历史反馈。
  • 文案一句话、动词结尾(「保存成功」),不放多行说明或操作按钮;富内容改用 Notification。
  • 短时反馈不要承载必须被用户看到的关键信息——duration 过后即消失,关键结果用 Result / Alert 呈现。
  • 与 AI 分类 ChatMessage 严格区分:会话消息走 ChatMessage,全局操作反馈走 Message。

正例

  • ✓ 表单提交成功后把 state.feedback 置为「保存成功」并绑定 content,toast 弹出后由表单重置逻辑清空。
  • ✓ 请求失败的 catch 分支将错误摘要写入 state,variant=error 弹出失败反馈。
  • ✓ 同一页面多处操作复用一个 Message:统一把反馈文案写入同一 state 字段,逐条触发。

反例

  • ✕ 用 Message 展示会话聊天消息(应使用 AI 分类的 ChatMessage)。
  • ✕ 把必须确认的删除后果写进 Message(应使用 Popconfirm / Dialog)。
  • ✕ 在 content 里拼多行长文或期望用户点击其中的操作(toast 无正文区与交互区,应使用 Notification / Dialog)。

Design Token 映射

不适用:组件 tokenRefs 为空:样式 Token 数据尚未接入,三层映射(Primitive → Semantic → Component)待样式 Token 接入后回填。