我正在使用 React v16.7,我正在尝试将 React 组件注入到第三方 JS 库(即 Highcharts)中,该库需要我从函数返回 HTML。这就是我现在正在做的事情:
function tooltipFormatter(dataPoint) {
// ... Calculate props according to the dataPoint here ...
const mountPoint = document.createElement('div');
ReactDOM.render(<Tooltip {...tooltipProps} />, mountPoint);
return mountPoint.innerHTML;
}
我在配置对象中传递这个函数,如下所示:
const config = {
...,
tooltip: {
...,
formatter() {
return tooltipFormatter(this);
}
}
}
我遇到的问题mountPoint.innerHTML
是空的。我发现ReactDOM.render()
有时异步工作:
ReactDOM.render()
当前返回对根ReactComponent
实例的引用。然而,使用这个返回值是遗留的,应该避免,因为未来版本的 React 在某些情况下可能会异步渲染组件。如果您需要对根ReactComponent
实例的引用,首选的解决方案是将回调引用附加到根元素。
在调试时,我这样做了:
ReactDOM.render(<Tooltip {...tooltipProps} />, mountPoint, () => {
console.log(mountPoint.innerHTML); // non-empty
});
console.log(mountPoint.innerHTML); // empty
return mountPoint.innerHTML;
如何强制ReactDOM.render()
在同步环境中工作?令人费解的是,这return mountPoint.innerHTML
在我们的应用程序的其余部分都有效,但似乎这种情况是唯一ReactDOM.render()
选择异步呈现内容的地方。