Visx is a library that lets us add graphics to our React app easily.
In this article, we’ll look at how to use it to add gradients into our React app.
Install Required Packages
We have to install a few modules.
To get started, we run:
npm i @visx/gradient @visx/responsive @visx/shape
to install the packages.
Create the Gradients
We can create gradients by writing:
import React from "react";
import { Bar } from "@visx/shape";
import {
GradientDarkgreenGreen,
GradientLightgreenGreen,
GradientOrangeRed,
GradientPinkBlue,
GradientPinkRed,
GradientPurpleOrange,
GradientPurpleRed,
GradientTealBlue,
RadialGradient,
LinearGradient
} from "@visx/gradient";
const defaultMargin = {
top: 0,
left: 0,
right: 0,
bottom: 0
};
const Gradients = [
GradientPinkRed,
({ id }) => <RadialGradient id={id} from="#55bdd5" to="#4f3681" r="80%" />,
GradientOrangeRed,
GradientPinkBlue,
({ id }) => (
<LinearGradient id={id} from="#351CAB" to="#621A61" rotate="-45" />
),
GradientLightgreenGreen,
GradientPurpleOrange,
GradientTealBlue,
GradientPurpleRed,
GradientDarkgreenGreen
];
function Example({ width, height, margin = defaultMargin }) {
const numColumns = width > 600 ? 5 : 2;
const numRows = Gradients.length / numColumns;
const columnWidth = Math.max(width / numColumns, 0);
const rowHeight = Math.max((height - margin.bottom) / numRows, 0);
return (
<svg width={width} height={height}>
{Gradients.map((Gradient, index) => {
const columnIndex = index % numColumns;
const rowIndex = Math.floor(index / numColumns);
const id = `visx-gradient-demo-${index}-${rowIndex}${columnIndex}`;
return (
<React.Fragment key={id}>
<Gradient id={id} />
<Bar
fill={`url(#${id})`}
x={columnIndex * columnWidth}
y={rowIndex * rowHeight}
width={columnWidth}
height={rowHeight}
stroke="#ffffff"
strokeWidth={8}
rx={14}
/>
</React.Fragment>
);
})}
</svg>
);
}
export default function App() {
return (
<div className="App">
<Example width={500} height={300} />
</div>
);
}
We import the gradient components from the @visx/gradient
module.
Then we put them in the Gradients
array.
We can use the imported components directly.
Or we can create a function that returns the RadiantGradient
to create the radiant gradient effect.
We can also use the LinearGradient
component to create a linear gradient.
In the Example
component, we call Gradients.map
to render the components in the map
callback.
We separate the gradients with a white bar by adding the Bar
component.
Conclusion
We can add gradients into our React app with the Visx library.