参与 WeaveFox「AI艺术家」大赛,赢 SEE Conf 门票与千元好礼

logoAnt Design X

设计研发组件X MarkdownX SDK演示
  • 介绍
  • 代码示例
  • 主题
  • 流式处理
    • 语法处理
    • 动画效果
  • 组件
    • 总览
    • Sources来源应用
    • Think思考过程
    • DataChart数据图表
    • Custom自定义组件
  • 插件集
    • 总览
    • Latex公式
    • HighlightCode代码高亮
    • Mermaid图表
    • CustomPlugins自定义插件
    • 主题和国际化

代码示例

何时使用

用于渲染 LLM 返回的流式 Markdown 格式。

代码演示

API

属性说明类型默认值
content需要渲染的 Markdown 内容string-
childrenMarkdown 内容,作为 content 属性的别名string-
components用于替换 HTML 元素的自定义 React 组件Record<string, React.ComponentType<ComponentProps> | keyof JSX.IntrinsicElements>,查看详情-
paragraphTag段落元素的自定义 HTML 标签,防止自定义组件包含块级元素时的验证错误keyof JSX.IntrinsicElements'p'
streaming流式渲染行为的配置StreamingOption,查看语法处理和动画效果-
configMarkdown 解析和扩展的 Marked.js 配置MarkedExtension{ gfm: true }
openLinksInNewTab是否为所有 a 标签添加 target="_blank"booleanfalse
dompurifyConfigHTML 净化和 XSS 防护的 DOMPurify 配置DOMPurify.Config-
className根容器的额外 CSS 类名string-
rootClassNameclassName 的别名,根元素的额外 CSS 类string-
style根容器的内联样式CSSProperties-

StreamingOption

属性说明类型默认值
hasNextChunk指示是否还有后续内容块,为 false 时刷新所有缓存并完成渲染booleanfalse
enableAnimation为块级元素(p、li、h1、h2、h3、h4)启用文字淡入动画booleanfalse
animationConfig文字出现动画效果的配置AnimationConfig{ fadeDuration: 200, opacity: 0.2 }
incompleteMarkdownComponentMap未完成语法对应的自定义组件名。当流式输出出现未闭合的 Markdown 语法(如半截表格、未收尾代码块)时,可手动指定用于包裹该片段的组件名称,实现占位或加载态。{ link?: string; image?: string; table?: string; html?: string }{}

AnimationConfig

属性说明类型默认值
fadeDuration淡入动画的持续时间(毫秒)number200
opacity动画期间字符的初始透明度值(0-1)number0.2

ComponentProps

属性说明类型默认值
domNode来自 html-react-parser 的组件 DOM 节点,包含解析后的 DOM 节点信息DOMNode-
streamStatus流式渲染支持两种状态:loading 表示内容正在加载中,done 表示加载已完成。当前仅支持 HTML 格式以及带围栏的代码块(fenced code)。由于缩进代码块(indented code)没有明确的结束符,因此始终返回 done 状态'loading' | 'done'-
rest组件属性,支持所有标准 HTML 属性(如 href、title、className 等)和自定义数据属性Record<string, any>-

FAQ

Components 与 Config Marked Extensions 的区别

Config Marked Extensions(插件扩展)

config 属性中的 extensions 用于扩展 Markdown 解析器的功能,它们在 Markdown 转换为 HTML 的过程中 起作用:

  • 作用阶段:Markdown 解析阶段
  • 功能:识别和转换特殊的 Markdown 语法
  • 示例:将 [^1] 脚注语法转换为 <footnote>1</footnote> HTML 标签
  • 使用场景:扩展 Markdown 语法,支持更多标记格式
typescript
// 插件示例:脚注扩展
const footnoteExtension = {
name: 'footnote',
level: 'inline',
start(src) { return src.match(/\[\^/)?.index; },
tokenizer(src) {
const rule = /^\[\^([^\]]+)\]/;
const match = rule.exec(src);
if (match) {
return {
type: 'footnote',
raw: match[0],
text: match[1]
};
}
},
renderer(token) {
return `<footnote>${token.text}</footnote>`;
}
};
// 使用插件
<XMarkdown
content="这是一个脚注示例[^1]"
config={{ extensions: [footnoteExtension] }}
/>

Components(组件替换)

components 属性用于将已生成的 HTML 标签替换为自定义的 React 组件:

  • 作用阶段:HTML 渲染阶段
  • 功能:将 HTML 标签替换为 React 组件
  • 示例:将 <footnote>1</footnote> 替换为 <CustomFootnote>1</CustomFootnote>
  • 使用场景:自定义标签的渲染样式和交互行为
typescript
// 自定义脚注组件
const CustomFootnote = ({ children, ...props }) => (
<sup
className="footnote-ref"
onClick={() => console.log('点击脚注:', children)}
style={{ color: 'blue', cursor: 'pointer' }}
>
{children}
</sup>
);
// 使用组件替换
<XMarkdown
content="<footnote>1</footnote>"
components={{ footnote: CustomFootnote }}
/>

未完成语法标记转换

当 hasNextChunk 为 true 时,所有未完成的语法标记会被自动转换为 incomplete-token 形式,并将未完成的语法通过 data-raw 属性返回,支持的 token 类型为 StreamCacheTokenType。例如:

  • 未完成的链接 [示例](https://example.com 会被转换为 <incomplete-link data-raw="[示例](https://example.com">
  • 未完成的图片 ![产品图](https://cdn.example.com/images/produc 会被转换为 <incomplete-image data-raw="![产品图](https://cdn.example.com/images/produc">
  • 未完成的标题 ### 会被转换为 <incomplete-heading data-raw="###">

StreamCacheTokenType 类型

StreamCacheTokenType 是一个枚举类型,定义了流式处理过程中支持的所有 Markdown 语法标记类型:

typescript
type StreamCacheTokenType =
| 'text' // 普通文本
| 'link' // 链接语法 [text](url)
| 'image' // 图片语法 ![alt](src)
| 'heading' // 标题语法 # ## ###
| 'emphasis' // 强调语法 *斜体* **粗体**
| 'list' // 列表语法 - + *
| 'table' // 表格语法 | 标题 | 内容 |
| 'xml'; // XML/HTML 标签 <tag>
基础用法

markdown基础语法渲染。

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code
动画
语法处理
流式处理

未完成语法处理、动画效果

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code
插件使用

使用插件渲染。

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code
自定义组件

自定义组件渲染标签。

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code
自定义拓展插件

渲染自定义标记[^1]。

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code
自定义标记

使用 tokenizer 设置 % 作为标题渲染。

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code
标记处理

使用 walkTokens 检查链接合法性并修改标记。

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code
渲染前处理

使用 renderer 做渲染前的效果处理讲html渲染成文字,同时给每个标题前加上🚀。

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code
中文链接处理

中文链接处理,英文如果非标准格式无法处理。

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code
XSS 防御
CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code

启用新标签页打开链接

禁用新标签页打开链接(默认)

新标签页打开链接

链接在新标签页打开。

CodeSandbox Icon
codepen icon
External Link Icon
expand codeexpand code