SVGからReactコンポーネントへ変換

SVGマークアップを貼り付けると、camelCase属性を持つ、そのままインポートできるReact関数コンポーネントが得られます。

propsを受け取る(<svg>に展開)
TypeScript(.tsx)

          

仕組み

SVGはブラウザ自身のDOMパーサーで解析されるため、単なるパターンマッチではなく、実際にマークアップとして理解されます。すべての属性名は、React自身が内部で使うのと同じマッピングを使ってReact/DOMの等価な名前に変換され(stroke-widthstrokeWidthclassclassNamexlink:hrefxlinkHrefなど)、ツリーはJSXとして再シリアライズされ、小さな関数コンポーネントでラップされます。「propsを受け取る」をオンにすると、{...props}がルート要素に展開されるため、呼び出し側は通常のReactの方法でwidthclassNameonClickハンドラなどを渡せます。

解析と変換はすべて、入力からブラウザが構築するDOMに対して、このページのJavaScriptで行われます。アップロードは一切行われません。

よくある質問

SVGとJSXの間で何が変わりますか?

属性名がcamelCaseに変わります(stroke-widthはstrokeWidthに、fill-ruleはfillRuleになります)。classはclassNameになり、自己終了タグにはJSXが要求する末尾のスラッシュが付きます。見た目の出力は同一です。

propsからサイズや色を制御できますか?

「propsを受け取る」をオンにすると、コンポーネントはルートの<svg>要素に{...props}を展開するようになり、使用する場所からwidth、height、className、その他任意のプロパティを上書きできます。これはアイコンコンポーネントの標準的なパターンです。

このSVGはどこかに送信されますか?

いいえ。変換はブラウザ内で行われる単純な文字列・属性変換です。アップロードは一切行われません。