@unifast/react

将 unifast 的 HAST 输出转换为 React 元素,并支持组件映射。

概述

@unifast/react 会将 unifast 的 HAST(HTML 抽象语法树)输出转换为 React 元素。它提供了两个主要函数:

  • compileToReact() —— 高层 API:编译 Markdown/MDX 并直接返回 React 元素

  • hastToReact() —— 低层 API:将 HAST 树转换为 React 元素

该包会自动处理 HTML 到 React 的属性重命名(class 改为 classNamefor 改为 htmlFor 等),并解析 CSS 样式字符串。

安装

对等依赖:compileToReact 需要 @unifast/node

类型定义

CompileToReactOptions

CompileOptions 的基础上新增了 React 相关字段。

属性类型描述
createElementCreateElementReact 的 createElement 函数
FragmentunknownReact 的 Fragment 组件
components?ComponentMapHTML 标签名到 React 组件的映射
(所有 CompileOptions)-继承自 CompileOptions

CompileToReactResult

属性类型描述
elementunknown根 React 元素
frontmatterRecord<string, unknown>解析后的 frontmatter 元数据
diagnosticsDiagnostic[]警告和错误
stats{ parseMs, transformMs, emitMs }各阶段耗时(毫秒)
tocTocEntry[]提取出的目录

HastToReactOptions

属性类型描述
createElementCreateElementReact 的 createElement 函数
FragmentunknownReact 的 Fragment 组件
components?ComponentMapHTML 标签名到自定义 React 组件的映射

CreateElement

type CreateElement = (type: any, props: any, ...children: any[]) => any;

ComponentMap

type ComponentMap = Record<string, unknown>;

属性转换

HTML 属性React 属性
classclassName
forhtmlFor
accesskeyaccessKey
autocompleteautoComplete
autofocusautoFocus
autoplayautoPlay
charsetcharSet
colspancolSpan
contenteditablecontentEditable
crossorigincrossOrigin
datetimedateTime
enctypeencType
formactionformAction
hreflanghrefLang
httpequivhttpEquiv
inputmodeinputMode
maxlengthmaxLength
minlengthminLength
novalidatenoValidate
readonlyreadOnly
referrerpolicyreferrerPolicy
rowspanrowSpan
spellcheckspellCheck
srcdocsrcDoc
srclangsrcLang
srcsetsrcSet
tabindextabIndex
usemapuseMap

CSS style 字符串会被自动解析为 React 的样式对象(例如 "font-size: 16px" 会变成 { fontSize: "16px" })。

导出列表

导出类别描述
compileToReactfunction将 Markdown/MDX 编译为 React 元素
hastToReactfunction将 HAST 转换为 React 元素
CompileToReactOptionstypecompileToReact 的选项
CompileToReactResulttypecompileToReact 的结果
HastToReactOptionstypehastToReact 的选项
CreateElementtypeReact createElement 的签名
ComponentMaptypeHTML 标签到组件的映射