更新2016年5月27日
作为阵营V15,对SVG支持在阵营是(接近?)100%的奇偶校验与当前SVG浏览器支持(source)。您只需要应用一些语法转换来使其兼容JSX,即like you already have to do for 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>
);
}
Working codepen demo
有关特定支持的详细信息,请查看文档list of supported SVG attributes。这里是(现在关闭的)GitHub issue,它跟踪对命名空间SVG属性的支持。
以前的答案
你可以做一个简单的SVG嵌入,而无需通过只是剥离命名空间属性使用dangerouslySetInnerHTML
。例如,这个工程:
render: function() {
return (
<svg viewBox="0 0 120 120">
<circle cx="60" cy="60" r="50"/>
</svg>
);
}
此时你可以考虑增加道具像fill
,或任何其他可能配置非常有用。
你可以创建一个jsbin吗?这可能就像将开启的SVG标签改为'
@FakeRainBrigand谢谢!在这种情况下就是这么简单。虽然,看看本的回答。很高兴知道您可以在需要时解决jsx解析问题。 – nicholas