Skip to content

Instantly share code, notes, and snippets.

@vtrifonov-esfiddle
Last active July 18, 2020 00:05
Show Gist options
  • Save vtrifonov-esfiddle/d74a109655f9aac7fe296c2b4001fc6b to your computer and use it in GitHub Desktop.
Save vtrifonov-esfiddle/d74a109655f9aac7fe296c2b4001fc6b to your computer and use it in GitHub Desktop.
React hook for debouncing value
import React from 'react';
export const useDebounced = <T extends unknown>(value: T, debounceDelay: number) => {
const [debouncedValue, setDebouncedValue] = React.useState(value);
React.useEffect(() => {
const timeout = setTimeout(() => setDebouncedValue(value), debounceDelay);
return () => clearTimeout(timeout);
}, [value, debounceDelay]);
return debouncedValue;
};
import React from 'react';
import { useDebounced } from './useDebounced';
export type TDebouncedStateResult<T> = [T, (value: T) => void];
export const useDebouncedState = <T extends unknown>(initialState: T, debounceDelay: number) => {
const [state, setState] = React.useState(initialState);
const debouncedState = useDebounced(state, debounceDelay);
const handleSetState = (value: T) => {
setState(value);
}
return [debouncedState, handleSetState] as TDebouncedStateResult<T>;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment