useDebounceFn
React hooks that debounce function
useDebounceFn wraps a function with debounce behavior powered by lodash.debounce. It returns an object with run, cancel, and flush methods, giving you full control over the debounced execution. The debounced function delays invoking your callback until after the specified wait time has elapsed since the last call.
When to Use
- Debouncing search input so API requests are only sent after the user stops typing
- Limiting the rate of expensive computations triggered by rapidly changing values (e.g., window resize calculations)
- Delaying form validation until the user pauses input
Notes
- Lodash options: The third parameter accepts
lodash.debounceoptions such asleading,trailing, andmaxWaitfor fine-tuned control. - Cleanup: Call
cancel()to discard any pending debounced invocation, orflush()to execute it immediately. - See also
useThrottleFnfor rate-limiting that guarantees execution at regular intervals rather than waiting for inactivity.
Usage
Live Editor
function Demo() { const [value, setValue] = useState(0); const { run } = useDebounceFn(() => { setValue(value + 1); }, 500); return ( <div> <p style={{ marginTop: 16 }}> Clicked count: {value} </p> <button type="button" onClick={run}> Click fast! </button> </div> ); };
Result
API
useDebounceFn
Returns
{ run: _.DebouncedFunc<(...args_0: Parameters<T>) => ReturnType<T>>; cancel: () => void; flush: any; }: A object with the following elements:
- run: exec function.
- cancel: cancel exec function.
- flush: immediately exec function
Arguments
| Argument | Description | Type | DefaultValue |
|---|---|---|---|
| fn | debounce function | T (Required) | - |
| wait | wait time | number | undefined | - |
| options | options passed to lodash.debounce | _.DebounceSettings | undefined | - |