reactjs - 如何渲染 [对象 SVGSVGElement]
问题描述
我正在使用一个函数来构建父 SVG 标记,然后根据状态值生成子 'circle' svg 组件。
当组件安装时,我收到以下错误
Objects are not valid as a React child (found: [object SVGSVGElement]). If
you meant to render a collection of children, use an array instead.
这是功能
buildSVG = () => {
const { overlays } = this.state;
const NS = 'http://www.w3.org/2000/svg';
const svgOverlay = document.createElementNS(NS, 'svg');
svgOverlay.id = 'svg_overlays';
svgOverlay.classList.add('overlay');
Object.keys(overlays).forEach((el) => {
const circle = document.createElementNS(NS, 'circle');
circle.setAttribute('cx', overlays[el].cx);
circle.setAttribute('cy', overlays[el].cy);
circle.setAttribute('r', overlays[el].r);
circle.setAttribute('fill', overlays[el].fill);
svgOverlay.appendChild(circle);
});
return svgOverlay;
}
理想情况下,这将呈现 svg 及其子项,在这种情况下,它会引发错误。
解决方案
buildSVG = () => {
const { overlays } = this.state;
const circleArray = [];
Object.keys(overlays).forEach((el) => {
const circle = (
<circle
key={overlays[el].cx + overlays[el].cy + overlays[el].fill}
cx={overlays[el].cx}
cy={overlays[el].cy}
r={overlays[el].r}
stroke={overlays[el].fill}
strokeWidth="4"
fill="blue"
/>
);
circleArray.push(circle);
});
return (
<svg
id="svg_overlays"
className="overlay"
onClick={this.handleClickOverlay}
onDragOver={this.handleOverlayDragOver}
onDrop={this.handleOverlayDrop}
>
{circleArray}
</svg>
);
}
推荐阅读
- django - 无法在 API 中获取图像数据以及用于注册的 json 数据
- javascript - 如何在javascript中将包含转义序列的字符串切割为给定长度?
- unity3d - 重生时试图阻止动力
- django - psycopg2.OperationalError:无法将主机名“db”转换为地址:名称或服务未知
- html - 删除谷歌文档后,插入谷歌文档的照片会持续多长时间?
- javascript - 如何通过jQuery中元素的索引设置数据属性值?
- windows - 进程访问文件时捕获事件的方法
- regex - powershell:删除字符串中的字符
- reactjs - REACT Jest - 测试套件无法运行
- javascript - javascript找不到存在的方法