跳到正文
QuireKit Markdown
开发者文档
预览版 · 未发布

React 接入

React 组件、流式更新、SSR 和自定义节点,与 Vue 共用解析内核。

@quirekit/incremark-react 提供 React 19 的 QuireMarkdown,直接依赖 @quirekit/incremark-core。解析、后置引用、脚注、HTML 净化和缓存规则与 Vue 一致。 React 包使用自己的语义 DOM,不需要 Vue、QuireKit UI 或 UnoCSS。

工作区接入

当前尚未发布到 npm;在 QuireKit 工作区的 React 应用中安装:

bash
tsx

content 始终是已收到的权威全文。宿主负责网络分片、取消与停止,组件负责增量解析 和呈现。停止保留当前字符串;status 不修补标记或冻结旧段落。更换消息时改变 identity;修改 parser 配置时替换 options 对象。高级宿主可传互斥的 state 快照。

可运行的 React 示例

下面挂载真实 React root;运行代码位于 react/app.ts,Vue 文件只是本站的挂载桥。 重新生成时观察未完整 HTML、业务标记、后置链接和脚注;复选框可关闭渲染缓存作对照。

正在准备示例…

组件与扩展

components 按语义标签替换 React 组件或原生标签。自定义组件获得 node、已验证属性 和 children;向原生元素转发 props 时先取出 node。原生标签不接收该元数据。 代码块组件另外获得 code、language,不需要从 children 反推代码原文。

原生 Lezer options.syntax 和 MSFE options.extensions 与 Vue 共用;从 React 包导入 withMarkdownReading 为已有 source codec 安装返回 ReactNode 的阅读贡献。 renderInline / renderBlocks 沿用源码范围校验;cacheKey(document) 覆盖自定义读取的 外部依赖。缺省 key 保守重投影,不能为了缓存把后置定义提前冻结。

load(context, signal) 只在客户端提交后启动;更换输入、identity 或卸载会 abort, 迟到资源也释放。自己的 render 回调失败保留原文,客户端的子组件错误由节点边界隔离。 React 服务端渲染不捕获任意子组件抛错,宿主仍须处理 SSR 根级错误;这一点遵循 React 的边界。

SSR、hook 与缓存

默认 ssr="semantic" 在服务端和首次水合完成相同语义解析;ssr="source" 先输出转义 原文,再在挂载后解析。两端必须传入相同内容、identity、配置与 locale。公式和图形 预览沿用客户端资源渲染,不在 SSR 执行 loader。

useMarkdownSource(input, onError?) 供自己的 React 阅读外壳消费 state、pending、 generation 和 error;无 UI 宿主使用纯解析内核。 QuireMarkdown 已内置 hook,不需要再为它维护第二个会话。

React 在 render 中准备缓存帧,提交后接受;被放弃的帧不更改已提交目录,也不通知错误 observer。 高级宿主用 MarkdownRenderer.prepare(...) / frame.commit() 接入这一合同;同步宿主 可使用 render(...)。StrictMode 的清理与重新连接可以安全重复。 依赖 key 和 HTML 回调每次组件 render 重新检查,宿主改变外部数据后须触发 React 更新。

当前交付 core、Vue 和 React;其他框架暂不实现。缓存以完整顶层块为单位,成本边界见 性能说明,逐项类型见 React API。

QuireKit Markdown · QuireKit流式 Markdown · @quirekit/incremark · MIT