Skip to content

useInterval

Category
Export Size
432 B
Last Changed
5 days ago

Reactive counter that increases on every interval.

Demo

Usage

tsx
import { 
useInterval
} from '@reause/shared'
// count will increase every 200ms const
counter
=
useInterval
(200)

With Controls

tsx
import { 
useInterval
} from '@reause/shared'
const {
counter
,
reset
,
pause
,
resume
,
isActive
} =
useInterval
(200, {
controls
: true,
}) // Reset counter to 0
reset
()
// Pause/resume the interval
pause
()
resume
()

Options

OptionTypeDefaultDescription
controlsbooleanfalseExpose pause, resume, reset, and isActive controls
immediatebooleantrueStart the interval immediately
callback(count: number) => voidCalled on every interval with the current count

Reactive Interval

The interval can be reactive:

tsx
import { 
useInterval
} from '@reause/shared'
import {
useState
} from 'react'
const [
intervalMs
,
setIntervalMs
] =
useState
(1000)
const
counter
=
useInterval
(
intervalMs
)
// Change the interval dynamically (restarts the running timer)
setIntervalMs
(500)

Callback on Every Interval

tsx
import { 
useInterval
} from '@reause/shared'
useInterval
(1000, {
callback
: (
count
) => {
console
.
log
(`Tick ${
count
}`)
}, })

Type Declarations

ts
export interface UseIntervalOptions<Controls extends boolean = false> {
    controls?: Controls;
    immediate?: boolean;
    callback?: (count: number) => void;
    immediateCallback?: boolean;
}

export interface UseIntervalControls {
    counter: number;
    reset: () => void;
    isActive: boolean;
    pause: () => void;
    resume: () => void;
}

export type UseIntervalReturn = number | UseIntervalControls

export function useInterval(interval?: number, options?: UseIntervalOptions<false>): number

export function useInterval(interval: number, options: UseIntervalOptions<true>): UseIntervalControls

Source

Source · Demo · VueUse

Contributors

hairyf

Changelog

v0.1.0 on
948bd - fix(shared): resolve useInterval audit findings (#733)
8fddc - chore!: remove all Vue-only Maybe* types and getter unions, adopt React Ref (#462)

Released under the MIT License. v0.1.8