我曾处理过类似的问题 - 为 CNC 目的生成参数化 SVG 路径。
问题不在于手动调用的下载(在 DOM 更新之后) - 也计划批量下载(压缩)。
问题是:如何在另一个节点/组件中显示 SVG 源/xml 以进行调试 - 在每次参数更改时更新。
但是,React 的渲染管道无法让我批量下载,因为我无法控制 JSX SVG 的显示周期。
这是真的……没有意义,更难的是 React Fiber 可能会延迟一些 DOM 更新 - 但 我们有一些可能性 需要通知。
-
componentDidUpdate() - 但“未调用初始渲染”
-
ref 回调 - 但是'... 定义为内联函数,它会在更新期间被调用两次,第一次使用 null,然后再次使用 DOM 元素'
出于几个原因,我更喜欢第二种方法,例如对 SVG(功能性)组件内部保持中立 - 但是不能保证在每个用例中都会调用它 - 如果不需要,也不会调用 - OTOH CDM 和 CDU 保证在调用时具有更新/正确的参考。
在某处发现的另一个提示(SO?):使用setTimeout 确保在 DOM 更新后调用的安全/确定回调。
downloadableReference = el => {
console.log("DWNLD_REF ",el);
this.svgElement = el // save in wrapper, prevent old ref usage
if( !!el ) { // not null - second pass, fresh, updated
console.log("DWNLD_REF ready ", el.outerHTML )
setTimeout( ()=>{
this.notifyDownloadableDependants() // safest way - will be called after CDU
}, 0 )
}
}
这可以结合批量下载。对于 UX,我会按顺序渲染它们 - 使用进度可视化、可取消处理等。
另一种可能性:- 可能(未经测试)使用react-jsx-parser 会有所帮助?