Perbarui 2016-05-27
Pada React v15, dukungan untuk SVG di React adalah (mendekati?) 100% paritas dengan dukungan browser saat ini untuk SVG ( sumber ). Anda hanya perlu menerapkan beberapa transformasi sintaksis agar JSX kompatibel, seperti yang harus Anda lakukan untuk HTML ( class
→ className
, style="color: purple"
→ style={{color: 'purple'}}
). Untuk atribut namespaced (dipisahkan usus besar), misalnya xlink:href
, hapus :
dan kapitalisasi bagian kedua dari atribut, misalnya xlinkHref
. Berikut ini adalah contoh dari svg dengan <defs>
, <use>
, dan gaya inline:
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>
);
}
Demo codepen bekerja
Untuk detail lebih lanjut tentang dukungan spesifik, periksa daftar dokumen tentang atribut SVG yang didukung . Dan inilah masalah GitHub (sekarang ditutup) yang melacak dukungan untuk atribut SVG namespaced.
Jawaban sebelumnya
Anda dapat melakukan embed SVG sederhana tanpa harus menggunakan dangerouslySetInnerHTML
hanya dengan menghapus atribut namespace. Misalnya, ini berfungsi:
render: function() {
return (
<svg viewBox="0 0 120 120">
<circle cx="60" cy="60" r="50"/>
</svg>
);
}
Pada titik mana Anda dapat berpikir tentang menambahkan alat peraga seperti fill
, atau apa pun yang mungkin berguna untuk dikonfigurasi.
<svg id="Layer_1">
(atau bahkan lebih baik, tanpa id). Sunting: inilah sebuah contoh: jsbin.com/nifemuwi/2/edit?js,output