Cách dùng SVG sang JSX
- Dán mã SVG, mở file
.svg, hoặc nhấn Mẫu. - Đặt tên component và các tùy chọn: TypeScript, spread props, xóa kích thước cố định hoặc đổi màu sang
currentColor. - Kiểm tra bản xem trước đã được làm sạch để chắc chắn icon hiển thị đúng.
- Sao chép component hoặc tải về dạng file
.jsx/.tsxrồi import vào dự án React hoặc Next.js của bạn.
Vì sao cần chuyển SVG sang React
SVG là XML, còn JSX là JavaScript trông giống HTML. Dán SVG thô trực tiếp vào React component thường gây ra cảnh báo như “Invalid DOM property stroke-width. Did you mean strokeWidth?” hoặc lỗi build với các thuộc tính có namespace như xlink:href và inkscape:label. Công cụ này viết lại mã thành JSX hợp lệ và bọc trong một component.
Những gì được chuyển đổi
| SVG | JSX |
|---|---|
class="icon" | className="icon" |
stroke-width="2", fill-rule, stop-color | strokeWidth="2", fillRule, stopColor |
xlink:href="#a", xml:space | xlinkHref="#a", xmlSpace |
style="fill-opacity: .5; stroke-linecap: round" | style={{ fillOpacity: 0.5, strokeLinecap: 'round' }} |
data-* và aria-* | Giữ nguyên (React dùng dấu gạch ngang cho các thuộc tính này) |
<?xml?>, <!DOCTYPE>, comment, <metadata>, thuộc tính của trình soạn thảo (Inkscape, Sodipodi, Sketch) | Bị xóa |
onclick và các inline handler khác, <script> | Bị xóa — handler dạng chuỗi không hợp lệ trong React |
Làm icon linh hoạt hơn
Khi bật Spread props, component sẽ kết thúc bằng {...props} trên thẻ <svg>, nhờ đó bạn có thể truyền className, width, aria-label hoặc event handler: <HeartIcon className="h-6 w-6" />. Xóa width/height cho phép CSS quyết định kích thước icon (nếu thiếu, viewBox sẽ được thêm từ kích thước cũ). Màu → currentColor thay thế màu fill và stroke để icon kế thừa màu chữ, rất phù hợp với bộ icon một màu. Tùy chọn TypeScript sẽ khai báo kiểu props là SVGProps<SVGSVGElement>.
Khả năng truy cập
Với icon trang trí đi kèm văn bản, hãy thêm aria-hidden="true". Với icon có ý nghĩa đứng riêng, hãy giữ lại thẻ <title> hoặc truyền role="img" kèm aria-label.
Quyền riêng tư và an toàn
Quá trình chuyển đổi chạy hoàn toàn trên trình duyệt của bạn, SVG không bao giờ rời khỏi thiết bị. Bản xem trước đã được làm sạch: script, foreignObject, inline event handler và tham chiếu bên ngoài đều bị loại bỏ trước khi hiển thị. Bạn đang làm quy trình dựa trên bundle? Các công cụ như SVGR làm việc tương tự ở bước build; trang này dành cho những icon cần chuyển nhanh, một lần. Nếu muốn dùng SVG làm nền CSS, hãy thử SVG sang CSS.
Cũng được tìm dưới tên: svg sang react, svg sang tsx, react svg component, svgr online, chuyển svg sang react, jsx converter, svg icon react, classname.
Các công cụ dùng kèm tốt với SVG sang JSX
- Chuyển HTML sang Markdown — Dán HTML — hoặc sao chép trực tiếp văn bản rich text từ trang web, Google Doc hay email — rồi nhận Markdown gọn gàng để đưa vào README, wiki hoặc static site.
- JSON sang TypeScript — Dán một mẫu JSON như phản hồi API hay file cấu hình, bạn sẽ nhận ngay các TypeScript interface sẵn sàng dùng, với kiểu lồng nhau, thuộc tính optional và union type.
- Ảnh sang Base64 — Chuyển PNG, JPEG, SVG, WebP hoặc GIF thành Base64 data URI với mã CSS và HTML sẵn sàng sao chép, hoặc dán chuỗi Base64 để xem trước và tải ảnh về.
- Định dạng HTML — Dán mã HTML đã nén hoặc lộn xộn và nhận lại HTML được thụt lề rõ ràng, nhất quán — bao gồm cả các khối <style> và <script> nhúng bên trong.
Câu hỏi thường gặp
Vì sao React cảnh báo “Invalid DOM property class”?
class là từ khóa dành riêng trong JavaScript, nên React dùng className. Điều tương tự áp dụng cho các thuộc tính SVG có dấu gạch ngang, chúng phải được viết camelCase (stroke-width → strokeWidth). Công cụ này tự động chuyển đổi các thuộc tính đó.Nên dùng xlinkHref hay href?
href thuần của SVG 2, còn xlink:href đã bị loại bỏ dần. React vẫn chấp nhận xlinkHref nên mã đã chuyển đổi vẫn chạy bình thường; bạn có thể đổi sang href nếu không cần hỗ trợ các trình duyệt rất cũ.Làm sao đổi màu icon bằng CSS?
color CSS của phần tử cha, nên className="text-red-500" hoặc style={{ color: "red" }} sẽ đổi màu icon.Kết quả có chạy được trong Next.js và Vite không?
Có dùng được với React Native không?
react-native-svg, dùng các component viết hoa như <Svg> và <Path>. Các thuộc tính camelCase từ công cụ này là điểm khởi đầu tốt, nhưng bạn cần đổi tên các phần tử.