ReactJS で SVG を埋め込む: 初心者向けガイド
ReactJS に SVG を埋め込む
SVG ファイルのインポート
import React from 'react';
const MyComponent = () => {
const svg = require('./my-svg.svg'); // SVG ファイルのパスを指定
return <div>{svg}</div>;
};
export default MyComponent;
このコードは、my-svg.svg
ファイルの内容を MyComponent
コンポーネント内にレンダリングします。
インライン SVG
SVG コードを直接コンポーネント内に記述することもできます。
import React from 'react';
const MyComponent = () => {
return (
<svg width="200" height="100">
<circle cx="50" cy="50" r="40" fill="red" />
</svg>
);
};
export default MyComponent;
このコードは、円を描画する SVG コードを直接 MyComponent
コンポーネント内に記述します。
コンポーネントとして SVG を使用
SVG を React コンポーネントとして定義することもできます。これにより、SVG を再利用しやすくなり、コードをよりモジュール化できます。
import React from 'react';
const MySVG = () => {
return (
<svg width="200" height="100">
<circle cx="50" cy="50" r="40" fill="red" />
</svg>
);
};
const MyComponent = () => {
return <MySVG />;
};
export default MyComponent;
このコードは、MySVG
コンポーネントを定義し、そのコンポーネントを MyComponent
コンポーネント内で使用します。
SVG のスタイル設定
React コンポーネントを使用して SVG を埋め込む場合、SVG をスタイル設定するために CSS を使用できます。
import React from 'react';
const MyComponent = () => {
return (
<svg width="200" height="100" style={{ stroke: 'blue', strokeWidth: 2 }}>
<circle cx="50" cy="50" r="40" fill="red" />
</svg>
);
};
export default MyComponent;
このコードは、circle
要素の線の色と太さを設定する CSS スタイルを SVG に追加します。
属性の受け渡し
SVG コンポーネントに属性を渡して、そのコンポーネントの動作を制御することもできます。
import React from 'react';
const MySVG = ({ color, size }) => {
return (
<svg width={size} height={size}>
<circle cx={size / 2} cy={size / 2} r={size / 2} fill={color} />
</svg>
);
};
const MyComponent = () => {
return (
<MySVG color="red" size={100} />
);
};
export default MyComponent;
このコードは、MySVG
コンポーネントに color
と size
という属性を渡し、その属性を使用して circle
要素の色とサイズを設定します。
サンプル 1: SVG ファイルのインポート
import React from 'react';
const MyComponent = () => {
const svg = require('./my-svg.svg'); // SVG ファイルのパスを指定
return <div>{svg}</div>;
};
export default MyComponent;
require('./my-svg.svg')
は、my-svg.svg
ファイルの内容を文字列として読み込みます。<div>{svg}</div>
は、SVG コードを HTML としてレンダリングします。
使い方:
my-svg.svg
ファイルを作成します。- 上記のコードを
MyComponent.js
などのファイルに保存します。 MyComponent
コンポーネントを他のコンポーネントで使用します。
例:
import React from 'react';
import MyComponent from './MyComponent';
const App = () => {
return (
<div>
<MyComponent />
</div>
);
};
export default App;
サンプル 2: インライン SVG
import React from 'react';
const MyComponent = () => {
return (
<svg width="200" height="100">
<circle cx="50" cy="50" r="40" fill="red" />
</svg>
);
};
export default MyComponent;
説明:
<svg>
タグは、SVG 要素を作成します。width
とheight
属性は、SVG の幅と高さを設定します。<circle>
タグは、円を描画します。cx
とcy
属性は、円の中心座標を設定します。r
属性は、円の半径を設定します。fill
属性は、円の塗りつぶしの色を設定します。
import React from 'react';
import MyComponent from './MyComponent';
const App = () => {
return (
<div>
<MyComponent />
</div>
);
};
export default App;
サンプル 3: コンポーネントとして SVG を使用
import React from 'react';
const MySVG = () => {
return (
<svg width="200" height="100">
<circle cx="50" cy="50" r="40" fill="red" />
</svg>
);
};
const MyComponent = () => {
return <MySVG />;
};
export default MyComponent;
MySVG
コンポーネントは、SVG コードを定義します。<MySVG />
は、MySVG
コンポーネントをレンダリングします。
import React from 'react';
import MyComponent from './MyComponent';
const App = () => {
return (
<div>
<MyComponent />
</div>
);
};
export default App;
サンプル 4: SVG のスタイル設定
import React from 'react';
const MyComponent = () => {
return (
<svg width="200" height="100" style={{ stroke: 'blue', strokeWidth: 2 }}>
<circle cx="50" cy="50" r="40" fill="red" />
</svg>
);
};
export default MyComponent;
style
属性は、SVG に CSS スタイルを適用します。stroke
プロパティは、線の色を設定します。
dangerouslySetInnerHTML プロパティを使用する
dangerouslySetInnerHTML
プロパティを使用して、SVG コードを直接 HTML としてレンダリングできます。ただし、この方法は、セキュリティ上のリスクがあるため、一般的には推奨されていません。
import React from 'react';
const MyComponent = () => {
const svg = '<svg width="200" height="100"><circle cx="50" cy="50" r="40" fill="red" /></svg>';
return <div dangerouslySetInnerHTML={{ __html: svg }} />;
};
export default MyComponent;
dangerouslySetInnerHTML
プロパティは、HTML コードを直接 DOM に挿入します。__html
プロパティは、挿入する HTML コードを指定します。
注意:
dangerouslySetInnerHTML
プロパティを使用すると、XSS 攻撃などのセキュリティ上の脆弱性が発生する可能性があります。- この方法は、SVG コードが信頼できるソースからのものである場合にのみ使用してください。
React.createElement 関数を使用する
React.createElement
関数を使用して、SVG 要素を動的に作成できます。
import React from 'react';
const MyComponent = () => {
const svgElement = React.createElement(
'svg',
{ width: 200, height: 100 },
React.createElement('circle', { cx: 50, cy: 50, r: 40, fill: 'red' })
);
return svgElement;
};
export default MyComponent;
React.createElement
関数は、React 要素を作成します。- 第 1 引数は、要素の種類を指定します。
利点:
- この方法は、より安全で、XSS 攻撃のリスクが低くなります。
- コードがより可読性が高くなります。
欠点:
- この方法は、やや複雑で、コードが冗長になる可能性があります。
サードパーティのライブラリを使用する
SVG を React で簡単に使用できるようにするサードパーティのライブラリがいくつかあります。
これらのライブラリは、SVG の読み込み、レンダリング、スタイル設定を簡素化できます。
ReactJS で SVG を埋め込む方法はいくつかあります。それぞれの方法には、利点と欠点があります。プロジェクトのニーズに合った方法を選択することが重要です。
一般的なガイドライン:
- シンプルな SVG を使用する場合は、
import
ステートメントまたはインライン SVG を使用する方が簡単です。 - 複雑な SVG を使用する場合は、コンポーネントとして SVG を使用するか、サードパーティのライブラリを使用する方が良いでしょう。
dangerouslySetInnerHTML
プロパティは、セキュリティ上のリスクがあるため、一般的には推奨されていません。
javascript svg reactjs