Оновлення 2016-05-27
Станом на React v15, підтримка SVG в React становить (близьку до?) 100% паритет з поточною підтримкою браузера для SVG ( джерело ). Вам просто потрібно застосувати деякі перетворення синтаксису, щоб зробити його JSX сумісним, як це вже потрібно зробити для HTML ( class
→ className
, style="color: purple"
→ style={{color: 'purple'}}
). Для будь-якого атрибута, розділеного двокрапкою, розділеного іменами, наприклад xlink:href
, видаліть :
і заздалегідь використовуйте велику частину другої частини атрибута, наприклад xlinkHref
. Ось приклад СВГ з <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
небудь, або інше, що може бути корисним для налаштування.
<svg id="Layer_1">
(а ще краще, без ідентифікатора). Edit: ось приклад: jsbin.com/nifemuwi/2/edit?js,output