JSX dán được ngay từ bất kỳ tệp SVG nào — thuộc tính được đổi tên theo cách React cần, props trải lên thẻ gốc, kèm TypeScript nếu bạn cần.
SVGReactJSXTypeScript
SVG → React
☞ chạy hoàn toàn trong trình duyệt — không có gì được tải lên
Thả tệp SVG của bạn vào đây
hoặc nhấp để chọn — chỉ nhận SVG
Component React (.jsx)
Tên component lấy từ tên tệp, nên arrow-left.svg sẽ thành ArrowLeft.
Component TypeScript (.tsx)
Cùng component đó, được gán kiểu SVGProps<SVGSVGElement>.
Đoạn JSX
Chỉ phần đánh dấu, để dán vào một component bạn đã có sẵn.
biểu tượng thành component
Vì sao không thể dán thẳng SVG vào JSX
JSX trông như đánh dấu nhưng thực chất là JavaScript. Các thuộc tính có dấu gạch nối như stroke-width không phải định danh hợp lệ, class trùng với từ khóa dành riêng, còn dấu ngoặc nhọn trong style nội tuyến bị đọc thành biểu thức. Một tệp SVG sao chép thẳng từ phần mềm thiết kế thường không biên dịch nổi vì ít nhất một trong những lý do đó.
Bộ chuyển đổi này chỉ đổi tên những gì buộc phải đổi và để yên phần còn lại. Thuộc tính data- và aria- giữ nguyên dấu gạch nối, vì React chuyển tiếp chúng nguyên vẹn — đổi tên chúng là cách phổ biến khiến bạn mất nhãn trợ năng mà không hay biết.
ba bước
Cách chuyển SVG thành component React
01
Thả tệp SVG
Chọn một tệp .svg — nó vẫn nằm trên thiết bị của bạn.
02
Sao chép khối bạn cần
Component đầy đủ, bản song sinh TypeScript, hoặc JSX trần.
03
Đưa vào dự án
Import như mọi component khác và tạo kiểu bằng props.
giải đáp nhanh
Câu hỏi thường gặp về SVG sang React
Vì sao {...props} nằm ở cuối thẻ svg?
Để những gì bạn truyền vào được ưu tiên. Trong JSX, thuộc tính viết sau ghi đè thuộc tính viết trước, nên khi đặt spread ở cuối, bạn có thể định className, width hay onClick từ bên ngoài. Nếu đặt lên đầu, các giá trị nằm sẵn trong tệp sẽ lặng lẽ ghi đè giá trị của bạn.
Làm sao đổi màu biểu tượng?
Thay giá trị fill hoặc stroke cố định trong kết quả bằng currentColor, rồi đặt màu bằng CSS trên bất kỳ phần tử cha nào. Nếu màu rải rác ở nhiều nút, hãy cho tệp qua công cụ đổi màu SVG trước — nó chuyển tất cả sang currentColor trong một lần.
Tôi dùng được với React Native chứ?
Không trực tiếp được. React Native không có DOM, nên SVG ở đó cần react-native-svg cùng các tên phần tử viết hoa như Svg và Path. Cách đổi tên thuộc tính trình bày ở đây vẫn đúng, nhưng phần import và thẻ thì khác.
Kết quả dồn thành một dòng rất dài
Đó là do tệp nguồn — SVG đã nén vẫn ở dạng nén, vì định dạng lại là việc khác. Hãy cho nó qua công cụ làm đẹp SVG trước, component sẽ ra với phần thụt lề dễ đọc.
Tệp của tôi có bị tải lên không?
Không. Việc chuyển đổi chỉ là xử lý chuỗi ký tự thuần túy diễn ra trong trình duyệt của bạn.