Chat 聊天气泡组件:左右对话与中间提示

介绍一个适合 Astro 博客文章的 Chat 组件,支持右侧自己的消息、左侧他人的消息,以及居中的时间和系统提示。

2026年6月19日
推荐阅读 3 分钟
756 字
浏览量
观众数

为什么需要 Chat

有些内容天然更适合“对话”而不是“段落”来呈现。比如聊天记录、访谈摘录、角色扮演、产品对话稿,或者写一篇更轻松的技术笔记。

这个 Chat 组件做的事情很简单:把“我说的话”放在右侧,把“别人说的话”放在左侧,把时间和系统提示放在中间,用最少的结构换来比较完整的聊天质感。

效果预览

2024-11-09 23:39:30

也许

我们可以聊聊天

纸鹿

我还可以有名字

纸鹿撤回了一条消息

用户1

有趣

我学到了。

基础用法

组件只需要一个 items 数组。数组里的每一项都描述一条聊天内容或一条中间提示。

2026-06-19 22:10:00

朋友

这个组件挺适合写聊天记录。

而且还能连续发好几条。

对,放在博客里做对话体文章刚刚好。

时间和系统提示也不用单独写样式了。

你把会话名称改成了“组件灵感”

数据规则

items 里的每一项支持下面这些字段:

字段类型说明
role"self" | "other" | "time" | "system"内容显示在哪一侧,以及用哪种样式渲染
contentstring | string[]聊天内容,支持单条文本,也支持连续多条气泡
namestring可选昵称,会显示在这一组消息上方

其中:

  • self 会渲染到右侧,使用蓝色气泡
  • other 会渲染到左侧,使用灰色气泡
  • time 会渲染到中间,适合放时间戳
  • system 也会渲染到中间,适合放撤回、改名、加入会话之类的提示

如果 content 是字符串数组,就会在同一组里连续渲染多个气泡;如果字符串里有换行,也会自动拆成多段文字。

Props 一览

属性类型默认值说明
itemsChatItem[][]聊天数据
classstring-额外类名,便于局部覆盖样式

核心实现

这个组件没有走复杂的插槽解析,而是直接把聊天内容收敛成结构化数据:

  1. role 决定左右位置和中间提示样式
  2. name 决定是否显示昵称
  3. content 统一归一成数组,这样单条和多条消息共用一套渲染逻辑
  4. 气泡内部再按换行拆成多个段落

这种写法对 MDX 更友好,因为在文章里维护一份聊天数据,通常比手写大量嵌套标签更轻松。

小结

Chat 组件适合放在“对话感”比较强的文章里。它不依赖额外库,也不要求客户端状态,只用 Astro 组件本身就能把聊天布局、昵称、时间和系统提示都整理好。后面如果你还想继续扩展头像、已读状态、引用消息,也可以在这个结构上接着加。

打赏中心

感谢你赐予我前进的力量

微信 微信
支付宝 支付宝
赞赏者名单 因为你们的支持让我意识到写文章的价值

来过,就留下你的足迹吧!