主题
输出与宿主
同一个场景可以交给两种宿主:一种输出 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,也不知道什么是端口、容器或业务节点。 - 同一个场景交给两种宿主时,差异应该只在介质,不在几何。