Skip to main content

BasicSVGRenderer

A built-in <svg /> element wrapper component, that helps user to render primitive(s) easily.

You are not required to use this renderer. This is a simple wrapper element for you to get start faster.

Configuration​

BasicSVGRenderer accepts below properties:

PropertyTypeDefaultDescription
primitivesPrimitive | Primitive[]requiredPrimitive(s) inside the viewBox.
pathPropsSVGProps<SVGPathElement>{}Props for the <path /> element(s). (optional)
viewBoxOptionsComputeSVGViewBoxOptions{}Options to construct the viewBox of the <svg /> element. (optional)
refForwardedRef<SVGSVGElement>undefinedReact ref to the <svg /> element. (optional)

extends SVGProps<SVGSVGElement>​

Any other props will be pass to the <svg /> element generated.

info

BasicSVGRenderer generate viewBox using useSVGViewBox under the hood. Hence, you can manipulate the viewBox using viewBoxOptions.

For more details, please view useSVGViewBox - viewBoxOptions.

note

As this using hooks under the hood, hence, it is a client component.

Example​

Basic usage:

import { useCircle, BasicSVGRenderer } from "react-use-polygon";

function Example() {
const circle = useCircle();

return <BasicSVGRenderer primitives={circle} />;
}

Multiple primitives​

You can render multiple primitives in one <svg /> element too:

import { useCircle, BasicSVGRenderer } from "react-use-polygon";

function Example() {
const c1 = useCircle();
const c2 = useCircle();
const c3 = useCircle();

return <BasicSVGRenderer primitives={[c1, c2, c3]} />;
}

Custom props​

You can pass in custom props to the <svg /> element, or <path /> element using pathProps, or even extra children:

import { useCircle, BasicSVGRenderer } from "react-use-polygon";

function Example() {
const circle = useCircle();

return (
<BasicSVGRenderer
primitives={circle}
className="MySVGElement" // Will be pass to <svg />
pathProps={{ fill: "white", stroke: "url(#redGradient)" }} // Will be pass to <path />
>
{"/* Or any children here */"}
<text x="210" y="72">
A red circle
</text>
<defs>
<linearGradient id="redGradient" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stopColor="#800000" />
<stop offset="50%" stopColor="#cc0000" />
<stop offset="100%" stopColor="#4d0000" />
</linearGradient>
</defs>
</BasicSVGRenderer>
);
}

useRef​

Lastly, you can pass in the ref object from useRef to reference the node element. This can be useful if you wish to animate or manipulate it.

i.e., using framer-motion:

import { useLayoutEffect } from "react-use-polygon";
import { useCircle, BasicSVGRenderer } from "react-use-polygon";
import { useAnimate } from "framer-motion";

function Example() {
const circle = useCircle();

const [scope, animate] = useAnimate();

useLayoutEffect(() => {
animate(scope.current, { scale: [0, 1] }, { duration: 1 });
}, []);

return <BasicSVGRenderer primitives={circle} ref={scope} />;
}