是否可以将SVG标记嵌入到ReactJS组件中?
render: function() {
return (
<span>
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmln ...
</span>
);
}
结果错误:
不支持命名空间属性。ReactJSX不是XML。
什么是最简单的方法。使用React React之类的东西对于我想做的事情来说是过大的。
更新2016-05-27
从React
v15开始,React中对SVG的支持与当前浏览器对SVG的支持(接近?)达到100%奇偶校验(源)。您只需要应用一些语法转换就可以使其与JSX兼容,就像您已经对HTML所做的一样(class
→ className
,style="color: purple"
→ style={{color: 'purple'}}
)。对于任何命名空间(用冒号分隔)的属性,例如xlink:href
,删除:
并大写该属性的第二部分,例如xlinkHref
。下面是与SVG的例子<defs>
,<use>
以及内嵌样式:
function SvgWithXlink (props) {
return (
<svg
width="100%"
height="100%"
xmlns="http://www.w3.org/2000/svg"
xmlnsXlink="http://www.w3.org/1999/xlink"
>
<style>
{ `.classA { fill:${props.fill} }` }
</style>
<defs>
<g id="Port">
<circle style={{fill:'inherit'}} r="10"/>
</g>
</defs>
<text y="15">black</text>
<use x="70" y="10" xlinkHref="#Port" />
<text y="35">{ props.fill }</text>
<use x="70" y="30" xlinkHref="#Port" className="classA"/>
<text y="55">blue</text>
<use x="0" y="50" xlinkHref="#Port" style={{fill:'blue'}}/>
</svg>
);
}
工作码笔演示
有关特定支持的更多详细信息,请查看文档的支持的SVG属性列表。这是(现已关闭的)GitHub问题,该问题跟踪对命名空间SVG属性的支持。
先前的答案
您可以进行简单的SVG嵌入,而不必dangerouslySetInnerHTML
通过剥离命名空间属性来使用。例如,这有效:
render: function() {
return (
<svg viewBox="0 0 120 120">
<circle cx="60" cy="60" r="50"/>
</svg>
);
}
此时,您可以考虑添加诸如之类的道具fill
,或者其他可能对配置有用的道具。
做这件事最轻的方法是什么。使用像反应艺术这样的东西对我试图做的事情来说是过度的。
问题内容: 我发现了一个开源应用程序,该应用程序创建了一个JFrame来显示一些内容。我想将此JFrame “嵌入” 到applet中,因此Jframe中显示的所有内容都将显示在applet中- 这可能吗? 谢谢你的帮助! 问题答案: 创建框架的实例。 获取框架的内容窗格。 将内容窗格添加到小程序。
问题内容: 使用标签将SVG直接包含在文档中时,您可以通过文档的样式表将CSS样式应用于SVG。但是,我试图将一种样式应用于嵌入的SVG(使用标签)。 是否可以使用以下代码? 问题答案: 简短的答案:不,因为样式不适用于文档边界。 但是,由于有标签,因此可以使用脚本将样式表插入svg文档。 这样的事情,并请注意,此代码假定已完全加载: 也可以插入一个元素来引用外部样式表: 另一个选择是使用第一种方
我有一个页面,其中包含几个SVG文件。为了同步这些SVG文件的样式,我想创建一个样式表来保存所有样式信息。 然而,当像下面这样包含SVG时,CSS不会被应用。任何人都有解决方案,或者是不可能链接到 时,所有样式都被应用,并且可以看到一个绿色矩形。但是当打开< code>page.htm时,看到的只是一个黑色的长方形。因此,显然没有应用任何已定义的样式。 page.htm 图片.svg 样式. cs
null Equinox建议第二种选择更容易。但对于生产,他们推荐1。我不知道为什么。在哪种情况下,什么是真正更好的,为什么? 我是一个经验丰富的Tomcat用户,在Equinox中嵌入Tomcat会改变对它的管理吗?或者换句话说,嵌入Equinox的Tomcat会有什么不同?
问题内容: 因此,通常包括我需要简单样式的大多数SVG图标,我这样做: 现在,我一直在玩ReactJS作为它的后期评估在我的新的前端开发堆栈可能的成分,但是我注意到,在其支持的标记/属性列表,无论是或支持。 是否可以使用svg精灵并以这种方式在ReactJS中加载它们? 问题答案: 2018年9月更新 :不建议使用此解决方案,请阅读乔恩的答案。 - 反应并不支持所有的SVG标签就像你说的,有支持的