為什麼會有這個轉換器
搜尋「svg to react component」,第一個結果是官方的 SVGR playground;頁面其餘部分是早就做到瀏覽器端轉換、SVGO 最佳化與批次 ZIP 匯出的第三方轉換器。搜尋「svg to vue component」,你會得到一個 GitHub 函式庫、幾篇 Stack Overflow 回答與部落格文章——但幾乎沒有能直接打開來用的工具。這個不對稱就是本頁存在的原因。
第二個原因是,天真的轉換器給你的是標記,不是元件。一個堪用的圖示元件需要四件貼上複製型網站通常會略過的事:
- Attribute 傳遞。 inheritAttrs: false 加上 v-bind="$attrs",表示 class、aria-label、@click 與 style 都會落在根 <svg> 上,而不是消失在多餘的包裝元素裡。
- 可套用佈景主題的顏色。 硬編碼的十六進位色值會被改寫成 currentColor,因此 CSS 中一行顏色宣告就能重新上色整個圖示——包括深色模式。
- 不衝突的 id。 漸層、遮罩與裁剪路徑的 id 會加上元件名稱前綴,因此一整套圖示可以共用同一個頁面。
- 圖示集流程。 把它指向一個資料夾:你會得到每個圖示一個 .vue,加上一個可供 tree-shaking 匯入的 index.ts barrel,壓縮成 ZIP,可直接提交。
最佳化在瀏覽器中透過 SVGO 執行,並刻意保留 removeViewBox 啟用,讓 size prop 持續運作。如果來源中有東西無法忠實轉換——內嵌 <style> 區塊、SMIL 動畫參照、script 標籤——工具會告訴你,而不是默默產生壞掉的程式碼。