What is react-spinners?
The react-spinners npm package provides a collection of loading spinner components for React applications. These spinners are customizable and can be used to indicate loading states in your application.
What are react-spinners's main functionalities?
ClipLoader
The ClipLoader is a simple circular spinner. You can customize its color, loading state, and size.
import { ClipLoader } from 'react-spinners';
function App() {
return (
<div className="App">
<ClipLoader color={"#123abc"} loading={true} size={150} />
</div>
);
}
BeatLoader
The BeatLoader consists of multiple dots that bounce. You can customize its color, loading state, size, and margin between dots.
import { BeatLoader } from 'react-spinners';
function App() {
return (
<div className="App">
<BeatLoader color={"#123abc"} loading={true} size={15} margin={2} />
</div>
);
}
BarLoader
The BarLoader is a horizontal bar that animates to indicate loading. You can customize its color, loading state, width, and height.
import { BarLoader } from 'react-spinners';
function App() {
return (
<div className="App">
<BarLoader color={"#123abc"} loading={true} width={100} height={4} />
</div>
);
}
Other packages similar to react-spinners
react-loader-spinner
react-loader-spinner provides a variety of SVG-based loading indicators for React applications. It offers more types of spinners compared to react-spinners and allows for more detailed customization of each spinner.
react-loading
react-loading is another package that offers a collection of loading indicators for React. It is simpler and has fewer customization options compared to react-spinners, but it is lightweight and easy to use.
react-content-loader
react-content-loader allows you to create SVG loading placeholders that mimic the content being loaded. It is more focused on skeleton screens rather than traditional spinners, providing a different approach to indicating loading states.
React Spinners
A collection of loading spinners with React.js based on Halogen.
This package is bootstraped using react-npm-boilerplate
Demo
Demo Page
Storybook
Installation
With Yarn:
yarn add react-spinners
With npm:
npm install --save react-spinners
Usage
Each loader has their own default properties. You can overwrite the defaults by passing props into the loaders.
Each loader accepts a loading
prop as a boolean. The loader will render null
if loading
is false
.
Example
import { useState, CSSProperties } from "react";
import ClipLoader from "react-spinners/ClipLoader";
const override: CSSProperties = {
display: "block",
margin: "0 auto",
borderColor: "red",
};
function App() {
let [loading, setLoading] = useState(true);
let [color, setColor] = useState("#ffffff");
return (
<div className="sweet-loading">
<button onClick={() => setLoading(!loading)}>Toggle Loader</button>
<input value={color} onChange={(input) => setColor(input.target.value)} placeholder="Color of the loader" />
<ClipLoader
color={color}
loading={loading}
cssOverride={override}
size={150}
aria-label="Loading Spinner"
data-testid="loader"
/>
</div>
);
}
export default App;
Example using React Class
import React from "react";
import ClipLoader from "react-spinners/ClipLoader";
const override: React.CSSProperties = {
display: "block",
margin: "0 auto",
borderColor: "red",
};
class AwesomeComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
loading: true,
};
}
render() {
return (
<div className="sweet-loading">
<ClipLoader
cssOverride={override}
size={150}
color={"#123abc"}
loading={this.state.loading}
speedMultiplier={1.5}
aria-label="Loading Spinner"
data-testid="loader"
/>
</div>
);
}
}
Available Loaders, PropTypes, and Default Values
Common default props for all loaders:
loading: true;
color: "#000000";
cssOverride: {}
speedMultiplier: 1;
All valid HTML props such as aria-*
and data-*
props are fully supported.
color
prop
color
prop accepts a color hash in the format of #XXXXXX
or #XXX
. It also accepts basic colors listed below:
maroon, red, orange, yellow, olive, green, purple, white,
fuchsia, lime, teal, aqua, blue, navy, black, gray, silver
cssOverride
prop
The cssOverride
prop is an object of camelCase styles used to create inline styles on the loaders. Any html css property is valid here.
size
, height
, width
, and radius
props
The input to these props can be number or string.
- If value is number, the loader will default to css unit
px
. - If value is string, the loader will verify the unit against valid css units.
- If unit is valid, return the original value
- If unit is invalid, output warning console log and default to
px
.
The table below has the default values for each loader.
Loader | size | height | width | radius | margin |
---|
BarLoader | | 4 | 100 | | |
BeatLoader | 15 | | | | 2 |
BounceLoader | 60 | | | | |
CircleLoader | 50 | | | | |
ClimbingBoxLoader | 15 | | | | |
ClipLoader | 35 | | | | |
ClockLoader | 50 | | | | |
DotLoader | 60 | | | | 2 |
FadeLoader | | 15 | 5 | 2 | 2 |
GridLoader | 15 | | | | |
HashLoader | 50 | | | | 2 |
MoonLoader | 60 | | | | 2 |
PacmanLoader | 25 | | | | 2 |
PropagateLoader | 15 | | | | |
PuffLoader | 60 | | | | |
PulseLoader | 15 | | | | 2 |
RingLoader | 60 | | | | 2 |
RiseLoader | 15 | | | | 2 |
RotateLoader | 15 | | | | 2 |
ScaleLoader | | 35 | 4 | 2 | 2 |
SyncLoader | 15 | | | | 2 |