更新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