UTILS.
100% trong trình duyệt
🎨

SVG sang thành phần JSX

Biến markup SVG thô thành một thành phần React sẵn dùng với các thuộc tính camelCase, prop spreading, và tùy chọn currentColor cùng forwardRef.

— kết quả hiển thị ở đây —

Về công cụ này

Công cụ SVG sang thành phần JSX chuyển markup SVG thô thành một thành phần React sạch, theo cách SVGR làm, nhưng hoàn toàn trong trình duyệt của bạn với không có gì được tải lên. Dán một icon được export từ một công cụ thiết kế và nhận một thành phần bạn có thể import và tạo kiểu. Nó phân tích SVG bằng DOMParser và báo một lỗi rõ ràng nếu markup sai định dạng.

Mọi thuộc tính SVG có gạch nối hoặc có namespace được camelCase sang tên React của nó — stroke-width sang strokeWidth, fill-rule sang fillRule, clip-path sang clipPath, stop-color sang stopColor, xlink:href sang xlinkHref, xmlns:xlink sang xmlnsXlink — trong khi các thuộc tính data-* và aria-* được để nguyên. Các chuỗi inline style trở thành đối tượng style, các phần tử rỗng như path và circle được tự đóng, và các prop được spread lên gốc <svg {...props}> để thành phần luôn cấu hình được. Các công tắc tùy chọn cho phép bạn thay các giá trị fill và stroke cứng bằng currentColor (để icon kế thừa màu văn bản), loại bỏ width và height để nó co giãn theo vùng chứa, và bọc thành phần với forwardRef để lộ nút <svg> bên dưới.

Chọn output JavaScript hoặc TypeScript: biến thể TypeScript định kiểu prop là React.SVGProps<SVGSVGElement> và, với forwardRef bật, dùng forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>. Thành phần được phát ra như một hàm mũi tên được export (export const Icon = (props) => (...)), với tên và thụt lề bạn chọn, sẵn sàng dán vào một module icon.

Câu hỏi thường gặp

Các thuộc tính SVG được chuyển đổi như thế nào?
Các thuộc tính có gạch nối và có namespace bằng dấu hai chấm được camelCase sang tương đương React của chúng: stroke-width sang strokeWidth, fill-rule sang fillRule, xlink:href sang xlinkHref. Các thuộc tính data-* và aria-* được giữ. Các inline style trở thành đối tượng style.
Tùy chọn currentColor làm gì?
Nó thay các giá trị màu fill và stroke cứng (bất cứ thứ gì khác none) bằng "currentColor", để SVG kế thừa màu văn bản xung quanh và có thể được tô lại màu bằng thuộc tính CSS color thuần trên phần tử cha.
Tại sao spread props lên svg?
Spread {...props} lên gốc <svg> cho phép người gọi truyền className, width, onClick, nhãn aria, và bất kỳ prop SVG nào khác cho thành phần. Với forwardRef bật, một ref cũng được chuyển tiếp tới phần tử bên dưới.
Khác biệt giữa output JS và TS là gì?
Output TypeScript định kiểu các prop là React.SVGProps<SVGSVGElement>, và với forwardRef nó dùng forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>. Output JavaScript bỏ các chú thích kiểu nhưng ngoài ra giống hệt.

Công cụ khác