Effects

useDebounce

Debounces a changing value.

Demo

value
debounced

settled

Usage

use-debounce.tsxtsx
import { useState } from "react";
import { useDebounce } from "hookli";

export function Demo() {
  const [text, setText] = useState("");
  const debounced = useDebounce(text, 500);

  return (
    <div>
      <input value={text} onChange={(e) => setText(e.target.value)} />
      <p>Value: {text}</p>
      <p>Debounced: {debounced}</p>
    </div>
  );
}

API

useDebounce.d.tsts
useDebounce<T>(value: T, delay: number): T

Parameters

NameTypeDefaultDescription
valueTThe value to debounce — any type works.
delaynumberMilliseconds the value must stay unchanged before the debounced value updates.

Returns

NameTypeDescription
debouncedValueTTrails the input value, updating only after delay ms without a change.

Hook

The implementation, straight from hookli. Copy it, or install the package.

src/hooks/useDebounce.hook.tstsx
import { useEffect, useState } from "react";

export const useDebounce = <T>(value: T, delay: number): T => {
  const [debouncedValue, setDebouncedValue] = useState<T>(value);

  useEffect(() => {
    const timer = setTimeout(() => {
      setDebouncedValue(value);
    }, delay);

    return () => {
      clearTimeout(timer);
    };
  }, [value, delay]);

  return debouncedValue;
};

View source on GitHub

Related hooks