Skip to content

输出与宿主 ​

同一个场景可以交给两种宿主:一种输出 SVG 字符串,一种写进 DOM。

正在渲染图表…

字符串宿主 ​

renderToSvg(scene) 适合服务端、CLI、快照测试和导出文件。它是全量输出,不接受 patch; padding 缺省为 8。 整个过程不访问 DOM,因此可以直接在 Node / Bun 里运行。

DOM 宿主 ​

createDomHost(svgElement) 支持:

  • mount(scene):首次挂载;
  • apply(patches):增量更新;
  • destroy():清理。

createDomHost 也接受 { padding }。DOM apply 会先校验整批 patch,失败抛 HostError, 不会留下半更新状态。

两种宿主共用同一份属性映射,所以同一份场景在字符串和 DOM 里应该有相同的 key、几何与 样式。

相机由场景决定 ​

Scene.bounds 是内容紧包围盒。没有 Scene.camera 时,宿主根据 padding 与 Scene.overflow 算最终相机;有显式 camera 时直接使用它,不再叠加 padding。

idPrefix 只影响实际 id,data-key 仍然是原始 key。同页放多张图时可以用它避免 id 冲突, 测试仍然可以按稳定 key 查找。

常见误解 ​

  • renderToSvg 不是“只更新一部分”的宿主,增量必须走场景 diff 和 DOM host。
  • Scene.bounds 是内容边界,不是最终相机;相机由 camera / padding / overflow 共同决定。
  • 宿主不认识 DrawDocument,也不知道什么是端口、容器或业务节点。
  • 同一个场景交给两种宿主时,差异应该只在介质,不在几何。

MIT License