Cập nhật 2016-05-27
Kể từ React v15, hỗ trợ cho SVG trong React là (gần bằng?) Chẵn lẻ 100% với hỗ trợ trình duyệt hiện tại cho SVG ( nguồn ). Bạn chỉ cần áp dụng một số chuyển đổi cú pháp để làm cho nó tương thích với JSX, giống như bạn đã phải làm với HTML ( class
→ className
, style="color: purple"
→ style={{color: 'purple'}}
). Đối với bất kỳ namespaced thuộc tính (dấu hai chấm-tách ra), ví dụ xlink:href
, hãy tháo :
và tận dụng phần thứ hai của thuộc tính, ví dụ xlinkHref
. Dưới đây là một ví dụ về một svg với <defs>
, <use>
và phong cách nội tuyến:
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>
);
}
Bản demo làm việc
Để biết thêm chi tiết về hỗ trợ cụ thể, hãy kiểm tra danh sách các thuộc tính SVG được hỗ trợ của tài liệu . Và đây là vấn đề GitHub (hiện đã đóng) đã theo dõi hỗ trợ cho các thuộc tính SVG được đặt tên.
Câu trả lời trước
Bạn có thể thực hiện một nhúng SVG đơn giản mà không cần phải sử dụng dangerouslySetInnerHTML
bằng cách chỉ tước các thuộc tính không gian tên. Ví dụ, điều này hoạt động:
render: function() {
return (
<svg viewBox="0 0 120 120">
<circle cx="60" cy="60" r="50"/>
</svg>
);
}
Tại thời điểm nào bạn có thể nghĩ về việc thêm các đạo cụ như fill
, hoặc bất cứ điều gì khác có thể hữu ích để cấu hình.
<svg id="Layer_1">
(hoặc thậm chí tốt hơn, không có id). Chỉnh sửa: đây là một ví dụ: jsbin.com/nifemuwi/2/edit?js,output