MarkdownRenderer - 流式 Markdown 渲染器
MarkdownRenderer 是轻量只读 Markdown 渲染组件,面向 LLM 流式输出。相比 MarkdownEditor 只读模式,无 Slate 依赖,体积更小、首屏更快;内置 GPT 风格逐词淡入,并支持图表 / 思维链 / 工具调用 / 文件预览 / Mermaid / 公式等代码块扩展。
何时使用
- 聊天 / Agent 场景渲染 LLM 的 Markdown 输出
- 内容流式追加(
streaming+ 持续更新content),需要 GPT 风格逐词淡入 - 将代码块语言扩展为图表、Mermaid、文件树、工具调用、Schema 等业务渲染器
- 不需要编辑能力,希望尽可能轻量
如需可编辑能力(评论、富文本、表格 inline 编辑等),请使用 MarkdownEditor。
代码演示
API Playground
流式与逐词淡入
streaming={true} 时默认开启 GPT 风格逐词淡入:新词各自淡入一次,已显示内容复用 DOM、不闪烁;纯 CSS 驱动,尊重 prefers-reduced-motion。代码块、表格、公式不参与拆词。关闭方式:
限流与淡入相互独立:throttleOptions.enabled: false 时内容即时渲染,fade 仍可单独控制。
isFinished={true} 会立即展示剩余正文并退出流式状态,即使 streaming 仍为 true。结束后移除内部逐词动画节点,保留媒体、图表等已有组件的状态。
流式追加会复用未变块的 React 元素与解析结果,普通正文只重新切分末尾窗口;脚注保留定义上下文并增量解析尾部,新增全局定义或正文修订时重新校验。代码块、表格分别订阅自身配置,更新表格预览配置不会刷新代码块。自定义解析插件数组建议保持引用稳定,实际插件变更会重建解析器并重新解析。
Mark 标签颜色与 Label
快速上手
静态 Markdown
流式渲染
在 Bubble 中经 markdownRenderConfig 透传即可:
自定义代码块渲染
通过 plugins[].renderer.rendererComponents 注册渲染器,键名对应代码块 language。内置语言(mermaid、chart、schema 等)的同名键会优先覆盖默认渲染。
MarkdownEditorPlugin.elements仅用于 Slate 编辑器;MarkdownRenderer只读plugin.renderer.rendererComponents。
完整示例见 OfficeViewer - Markdown 中渲染卡片:Word / Excel 渲染为文件卡片、PPTX 卡片内展示幻灯片缩略图列表,点击打开详情预览。
API
MarkdownRendererProps
MarkdownRendererTableConfig
表格操作在悬停或聚焦后挂载,预览正文在打开后挂载,关闭后释放。视频与音频默认 preload="none",自动播放时加载元数据;HTML 中显式指定的 preload 优先。
MarkdownRendererRef
ContentThrottleOptions
控制流式内容按帧推进的节奏,并统一承载逐词淡入开关。
MarkdownToHtmlConfig
FileMapConfig
内置代码块渲染器
按代码块 language 路由;业务可直接书写带语言标记的代码块触发:
上述渲染器均由
MarkdownRenderer顶层导出,可在自定义流水线中独立复用。
相关 Hook 与工具
注意事项
isFinishedvsstreaming:流式过程保持streaming={true};结束时将isFinished置true会立即展示剩余字符并退出流式状态。未设置结束标记时,限流器也会按charsPerFrame自然推完,但仍保留流式展示模式。throttleOptions.fade:仅streaming={true}时生效,默认开启;仅显式fade: false关闭。代码块、表格、公式不参与拆词。Slate 模式(默认renderMode: 'slate')无逐词淡入。linkConfig.onClick:返回false可阻止默认跳转。eleRender:返回undefined/null回退默认 DOM;只有显式返回 React 节点才会覆盖。
