SVG → React

SVG sang component React

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.

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

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.