Add SVGs as React Components with Create React App 2.0
https://egghead.io/lessons/react-add-svgs-as-react-components-with-create-react-app-2-0
Create React App のドキュメントにも記述があります。
https://create-react-app.dev/docs/adding-images-fonts-and-files
Create React Appで作ったReactアプリケーションでは画像ファイルを下のようにインポートしてコンポーネント内で参照することが出来ます。
import logo from './logo.png';function Header() {
return <img alt="Logo" src="{logo}" />;
}
もちろん画像の形式がSVGであっても同様です。
import logo from './logo.svg';function Header() {
return <img alt="Logo" src="{logo}" />;
}
ただ、SVG形式の場合はインポートの仕方を下のように変えるとReactコンポーネントとしても使えるようになるそうです。
import { ReactComponent as Logo } from './logo.svg';function App() {
return (
<div className="App">
<header className="App-header">
<Logo className="App-logo" />
</header>
</div>);
}
このようにすると、HTMLとしてレンダリングされる際のタグが imgタグではなく、svgタグになります。
svgタグになってうれしい点は、SVG内の個々の要素(図形)をCSSでコントロール出来るようになることです。
例えば、線の色や太さを変えたり、アニメーションを付け加えたりすることが可能になります。
下の例では、Reactロゴのpathエレメントの部分のみ点線にして、さらに点線のオフセットをアニメーションで動かしています。
.App-logo path {stroke: palegoldenrod;
stroke-width: 10px;
fill: none;
stroke-dasharray: 35px 15px;
animation: orbit 1s infinite linear;
} @keyframes orbit {
to {
stroke-dashoffset: 50px;
}
}
実行するとこんな感じになります。