2.2.0 • Published 4 years ago

@react-hook/throttle v2.2.0

Weekly downloads
55,182
License
MIT
Repository
github
Last release
4 years ago

A React hook for performantly throttling setState and other callbacks.

Quick Start

import {useThrottle, useThrottleCallback} from '@react-hook/throttle'

const Component = (props) => {
  // at a basic level, used just like useState
  const [value, setValue] = useThrottle('initialValue')
}

const useMyCallback = (initialState, wait, leading) => {
  // this is the same code useThrottle() uses to throttle setState
  const [state, setState] = useState(initialState)
  return [state, useThrottleCallback(setState, wait, leading)]
}

API

useThrottle(initialState, fps?, leading?)

A hook that acts just like React.useState, but with a setState function that is only invoked at most X frames per second. A trailing call is guaranteed, but you may opt-in to calling on the leading edge, as well.

export const useThrottle = <State>(
  initialState: State | (() => State),
  fps?: number,
  leading?: boolean
): [State, Dispatch<SetStateAction<State>>]

Arguments

PropertyTypeDefaultDescription
initialStateState | (() => State)The initial state provided to React.useState()
fpsnumber30Defines the rate in frames per second with which setState is invoked with new state
leadingbooleanfalseCalls setState on the leading edge (right away). When false, setState will not be called until the next frame is due

Returns [state, setState]

VariableTypeDescription
stateStateThe current value in state
setStateDispatch<SetStateAction<State>>A throttled setState callback

useThrottleCallback(callback, fps?, leading?)

A hook that invokes its callback at most X frames per second. A trailing call is guaranteed, but you may opt-in to calling on the leading edge, as well.

export const useThrottleCallback = <Callback extends (...args: any[]) => void>(
  callback: Callback,
  fps = 30,
  leading = false
): Callback

Arguments

PropertyTypeDefaultDescription
callback((...args: CallbackArgs) => void)This is the callback you want to throttle. You need to wrap closures/unstable callbacks in useCallback() so that they are stable, otherwise throttling will break between renders.
fpsnumber30Defines the rate in frames per second with which setState is invoked with new state
leadingbooleanfalseCalls setState on the leading edge (right away). When false, setState will not be called until the next frame is due

Returns throttledCallback

VariableTypeDescription
throttledCallback((...args: CallbackArgs) => void)A throttled version of your callback

LICENSE

MIT