Message
全局短时反馈操作结果。中文惯用名:全局消息;与 AI 会话组件 ChatMessage 名称与职责均不同。
稳定本期新增已接入
元信息
| 字段 | 值 |
|---|---|
| 规范 ID | component.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 结构
{
"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 属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
content | string | — | 反馈文案:变为非空字符串时(含首次挂载)发一条全局短 toast;触发语义仅依赖 content 引用,variant / duration 变化不重发 |
variant | `'success' | 'error' | 'info' |
duration | number | — | 自动关闭时长(ms),透传 toast timeout;0 表示不自动关闭 |
className | string | — | 通用:标记节点 class |
style | CSSProperties | — | 通用:标记节点内联样式 |
使用规范
- 页面必须挂载 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 接入后回填。