Skip to content

Instantly share code, notes, and snippets.

@jinsley8
Created November 29, 2022 22:18
Show Gist options
  • Save jinsley8/51dfe46a895dcb30b01883988059497d to your computer and use it in GitHub Desktop.
Save jinsley8/51dfe46a895dcb30b01883988059497d to your computer and use it in GitHub Desktop.
A hook to debounce input data
import { useEffect, useState } from 'react';
export default function useDebounce<T>(value: T, delay: number): T {
// State and setters for debounced value
const [debouncedValue, setDebouncedValue] = useState<T>(value);
useEffect(
() => {
// Update debounced value after delay
const handler = setTimeout(() => {
setDebouncedValue(value);
}, delay);
// Cancel the timeout if value changes (also on delay change or unmount)
// This is how we prevent debounced value from updating if value is changed ...
// .. within the delay period. Timeout gets cleared and restarted.
return () => {
clearTimeout(handler);
};
},
[value, delay] // Only re-call effect if value or delay changes
);
return debouncedValue;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment