We can embed SVGs directly with JSX into our React app.
For instance, we can write:
import React from "react";
const SvgWithXlink = (props) => {
return (
<svg
width="100%"
height="100%"
xmlns="http://www.w3.org/2000/svg"
xmlnsXlink="http://www.w3.org/1999/xlink"
>
<style>{\`.classA { fill:${props.fill} }\`}</style>
<defs>
<g id="Port">
<circle style={{ fill: "inherit" }} r="10" />
</g>
</defs>
<text y="15">black</text>
<use x="70" y="10" xlinkHref="#Port" />
<text y="35">{props.fill}</text>
<use x="70" y="30" xlinkHref="#Port" className="classA" />
<text y="55">blue</text>
<use x="70" y="50" xlinkHref="#Port" style={{ fill: "blue" }} />
</svg>
);
};
export default function App() {
return (
<div className="App">
<SvgWithXlink fill="green" />
</div>
);
}
to embed the SVG in the SvgWithXLink
component.
We just put the elements required to embed the SVG into the component.
And we can pass props into the elements as we do with any other HTML elements or components.
We have the circle
to add circles.
And the xLinkHref
attribute lets us the circle by the id
of the g
element.
x
and y
are the coordinates of the location of the elements.
In App
, we add SvgWithXLink
with the fill
prop set to 'green'
.
Now we see 3 circles.