语法处理
语法处理
语法处理机制专为流式渲染场景设计,能够智能识别不完整的 Markdown 语法结构,通过灵活的自定义组件映射,提供流畅的用户体验。
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| hasNextChunk | 是否还有后续数据 | boolean | false |
| enableAnimation | 启用文本淡入动画 | boolean | false |
| animationConfig | 文本动画配置 | AnimationConfig | { fadeDuration: 200, easing: 'ease-in-out' } |
| incompleteMarkdownComponentMap | 未完成语法对应的自定义组件名。当流式输出出现未闭合的 Markdown 语法(如半截表格、未收尾代码块)时,可手动指定用于包裹该片段的组件名称,实现占位或加载态。 | Partial<Record<Exclude<StreamCacheTokenType, 'text'>, string>> | {} |
当 hasNextChunk 为 true 时,所有未完成的语法标记会被自动转换为 incomplete-token 形式,并将未完成的语法通过 data-raw 属性返回,支持的 token 类型为 StreamCacheTokenType。例如:
[示例](https://example.com 会被转换为 <incomplete-link data-raw="[示例](https://example.com">| 'image' // 图片语法 | 'heading' // 标题语法 # ## ###| 'emphasis' // 强调语法 *斜体* **粗体**| 'list' // 列表语法 - + *| 'table' // 表格语法 | 标题 | 内容 || 'xml'; // XML/HTML 标签 <tag>
流式语法处理支持以下 Markdown 语法的完整性检查:
| 语法类型 | 格式示例 | 处理机制 | 未完成状态示例 | 对应 TokenType |
|---|---|---|---|---|
| 链接 | [text](url) | 检测未闭合的链接标记 | [示例网站](https://example | link |
| 图片 |  | 检测未闭合的图片标记 |  => <Skeleton.Image active style={{ width: 60, height: 60 }} />;const IncompleteLink = (props: ComponentProps) => {const text = String(props['data-raw'] || '');// 提取链接文本,格式为 [text](url)const linkTextMatch = text.match(/^\[([^\]]*)\]/);const displayText = linkTextMatch ? linkTextMatch[1] : text.slice(1);return (<a style={{ pointerEvents: 'none' }} href="#">{displayText}</a>);};const App = () => {return (<XMarkdowncontent="访问[Ant Design](https://ant.design)查看文档,这里有`代码示例`和|表格数据|"streaming={{hasNextChunk,incompleteMarkdownComponentMap: {link: 'link-loading',},}}components={{'link-loading': ImageSkeleton,'incomplete-link': IncompleteLink,}}/>);};
在流式传输过程中,Markdown语法可能处于不完整状态:
// 不完整的链接语法: [示例网站](https://example // 不完整的图片语法: ![产品图](https://cdn.example.com/images/produc
不完整的语法结构可能导致:
truehasNextChunk 不应该始终为 true,否则会导致以下问题: