SVGをReact JSXコンポーネントに変換
ガイド
SVGをReact JSXコンポーネントに変換
raw SVG マークアップを貼り付け、クリーンなReact関数コンポーネントを返します。このツールはすべての属性に対して決定論的なcamelCase変換を適用し、非JSX構文を削除し、出力の一部を読み取り可能なコンポーネントにラップします——オプションで型付け、オプションで forwardRef-ラップされ、オプションでプロパティでサイズを調整できます。すべてがブラウザ内で実行されるため、アイコンやロゴはあなたのマシンに残ります。
使用方法
- 完全な
<svg>…</svg>マーカーを入力ボックスに貼り付けます。 - コンポーネント名を設定(PascalCase、例
ArrowRightIcon). - TypeScriptを切り替えます
forwardRef、スケーラブルなサイズプロパティ、およびプロパティのスプレッドをプロジェクトに合わせて設定します。 - 生成されたJSXをコピーするか、または
.tsx/.jsxファイル。
機能
- camelCase属性 –
stroke-widthになりますstrokeWidth,fill-ruleになりますfillRule、そしてSVG仕様のすべてにわたって適用されます。 - 予約語の処理 –
classはclassName,forにhtmlForと、xlink:hrefにxlinkHref. - インラインスタイルパーサー –
style="color: red; font-size: 12px"はcamelCaseキーを持つJSXスタイルオブジェクトに変換されます。 - TypeScript出力 – 型定義を有効にすると生成します。
React.SVGProps<SVGSVGElement>スケーラブルアイコンモード - – 幅/高さのハードコードされた値を プロパティに置き換え、意味のあるデフォルト値を提供します。
widthとheightforwardRefラッパー - – デベロッパーツールにアクセスできる コンポーネントを発行します。
React.forwardReffor DevTools。displayNameプロパティスプレッド - – ルートに任意のプロパティを転送 消費者が
<svg>、ARIA、またはイベントハンドラを設定できるようにします。className、ARIA、またはイベントハンドラ。 - オフライン設計 – SVGはブラウザに留まります。アップロードやサーバーとの通信はありません。
よくある質問
-
ReactとJSXがSVG属性名をどう変更するのか?
JSXは直接JavaScriptオブジェクトプロパティアクセスにコンパイルされ、JavaScript識別子にはハイフンが含まれません。ReactはDOM IDLに合わせてcamelCaseプロパティ名を標準化しており、たとえば
stroke-widthになりますstrokeWidthはDOMがelement.strokeWidthとして公開されているためです。一部の属性(class,for)はJavaScriptの予約語と衝突し、名前を(className,htmlFor)に変更してパーサーとの衝突を回避します。 -
React.forwardRef がSVGコンポーネントに何を提供するのか?
デフォルトでは、関数コンポーネントは親から
refを受け取ることができません——Reactはそれを無視します。React.forwardRef親に下位DOMノードを暴露し、フォーカス管理、測定、またはFramer MotionやGSAPなどのアニメーションライブラリとの統合に直接アクセスする必要がある場合に不可欠です。<svg>SVGをインライン画像として埋め込むべきでない理由は? -
SVGをJSXとして埋め込むことで、DOMツリーに対する完全な制御が得られます:ストロークやフィルをCSS変数でテーマ化できます、個々のパスをアニメーションできます、実行時で色を切り替えたり、ビルド時に使用しないアイコンをtree-shakeできます。一方、
はオパケなレターリクス要素として動作し、ホストページからその内部をスタイル設定できません。
<img src="icon.svg">幅と高さをプロパティとして保持する理由は? -
ハードコードされたピクセルサイズはアイコンを1つのサイズに固定し、レイアウト内で組み合わせる際に不都合です。幅
をプロパティとして公開(元の
widthとheight)を伴う場合、同じコンポーネントをツールバーで16px、ヘッダーで48pxなどにレンダリングできるようになり、SVGのベクタースケーリングがすべてのサイズでクリアな品質を維持します。viewBoxは2026年4月30日に追加されました
