Skip to content

BubbleList

BubbleList 渲染消息数组,并在新增消息或流式输出时自动滚动到底部。

导入方式

按需导入

import { BubbleList } from '@weimin96/ai-chat-vue'
import '@weimin96/ai-chat-vue/styles'

完整导入

import * as AiChatVue from '@weimin96/ai-chat-vue'
import '@weimin96/ai-chat-vue/styles'

app.use(AiChatVue)

// 模板中可直接使用 <BubbleList />

基础用法

U
帮我总结这个组件库的核心能力。
10:38 AM
AI

识别用户目标:需要一个可复用的聊天界面。

组合消息气泡、输入框和 Markdown 渲染能力。

它提供 聊天容器消息气泡输入框Markdown 渲染能力。

HTML

状态卡片

HTML · v1

<div style="font-family:sans-serif;padding:24px"><h2>构建完成</h2><p>示例 Artifact 预览。</p></div>
10:39 AM

API

属性类型默认值说明
messagesMessage[]必填消息列表
isGeneratingbooleanfalse是否生成中
enableMarkdownbooleanfalse是否启用 Markdown
virtualbooleantrue是否启用虚拟滚动
virtualThresholdnumber80触发虚拟滚动的消息数量
estimatedItemHeightnumber96未测量消息的估算高度
virtualBuffernumber6可视区域外的缓冲消息数量
onRetry(id: string) => voidundefined列表级重试消息
onEdit(id: string, content: string) => voidundefined列表级编辑消息
onDelete(id: string) => voidundefined列表级删除消息

注意事项

外层容器需要提供高度,否则滚动区域无法形成。

messages.length > virtualThresholdvirtual !== false 时,BubbleList 只渲染可视区域和缓冲区内的消息。组件会测量已渲染消息高度,未测量项使用 estimatedItemHeight 参与滚动占位计算。消息高度差异极大的场景可以调大 virtualBuffer,或传入 virtual={false} 关闭虚拟滚动。

滚动容器内置 role="log"aria-live="polite"aria-relevant="additions",新消息会以非打断方式通知屏幕阅读器。Headless 场景下,useHeadlessBubbleList().listAttrs 提供同样的属性集合。

Bubble 是单条消息组件,onRetryonDelete 不需要参数;BubbleList 是列表组件,同一个回调会服务多条消息,因此通过 id 标识目标消息。需要拿到完整消息对象时,可以在回调中用 messages.find(message => message.id === id) 解析。

onEdit(id, content) 会透传自子级 Bubble.onEdit,只负责把目标消息 id 和当前内容交给调用方,不会自动修改消息或重新触发流式回复。