react-compound-timer
Version:
React hooks for timers, countdowns, and stopwatches.
76 lines (53 loc) • 2.43 kB
Markdown
# react-compound-timer
[](https://www.npmjs.com/package/react-compound-timer) [](https://www.npmjs.com/package/react-compound-timer) [](https://www.npmjs.com/package/react-compound-timer) [](https://www.npmjs.com/package/react-compound-timer)
Custom react hook for creating timers, stopwatches, countdowns, etc.
Demo: https://volkov97.github.io/react-compound-timer/
## Installation
```bash
npm install react-compound-timer
```
## Usage
See [demo](https://github.com/volkov97/react-compound-timer/tree/master/demo/react) folder for usage example.
Examples:
- [Timer](https://github.com/volkov97/react-compound-timer/blob/master/demo/react/src/components/TimeModelExample/Timer.tsx)
- [Stopwatch](https://github.com/volkov97/react-compound-timer/blob/master/demo/react/src/components/TimeModelExample/Stopwatch.tsx)
- [More examples](https://github.com/volkov97/react-compound-timer/tree/master/demo/react/src/components/TimeModelExample)
Simple stopwatch:
```jsx
import { createTimeModel, useTimeModel } from "react-compound-timer";
// Create model, provide your own options object if needed
const stopwatch = createTimeModel();
export const Stopwatch = () => {
// Use this model in any components with useTimeModel hook
const { value } = useTimeModel(stopwatch);
return <div>{value.s} seconds {value.ms} milliseconds</div>;
};
```
You can provide your own options object. See default options [here](https://github.com/volkov97/react-compound-timer/blob/master/packages/react-compound-timer/src/instances/timeModel.ts#L7).
Simple timer:
```jsx
import { createTimeModel, useTimeModel } from "react-compound-timer";
import { TimeModelValueView } from "../TimeModelValueView/TimeModelValueView";
const timer = createTimeModel({
// start from 10 seconds
initialTime: 10000,
// count down
direction: "backward",
});
export const Timer = () => {
const { value } = useTimeModel(timer);
return <div>{value.s} seconds {value.ms} milliseconds</div>;
};
```
Default options:
```js
{
initialTime: 0,
direction: "forward",
timeToUpdate: 250,
startImmediately: true,
lastUnit: "d",
roundUnit: "ms",
checkpoints: [],
}
```