useDebounce
useDebounce 是一个返回所提供回调函数防抖版本的 React Hook。它通过延迟函数执行并将多次调用合并为一次,帮助优化事件处理。
使用默认选项时,最后一次调用会在没有再次调用的 wait 毫秒后执行。当组件卸载,或 wait、leading、trailing 发生变化时,待执行的调用会被取消。调用 .cancel() 只会取消一个待执行的回调,而不会取消一个已经开始的网络请求。该示例在本地显示查询。要搜索服务器,请将应用程序的搜索回调作为第一个参数传给 useDebounce。
接口
ts
function useDebounce<F extends (...args: any[]) => unknown>(
callback: F,
wait: number,
options?: DebounceOptions
): F & { cancel: () => void };参数
- callbackrequired · F
要被防抖的函数。
- waitrequired · number
延迟函数执行的毫秒数。
- optionsDebounceOptions
用于防抖行为的配置选项。
- options.leadingboolean · false
如果为
true,函数会在序列开始时被调用。 - options.trailingboolean · true
如果为
true,函数会在序列结束时被调用。
- options.leadingboolean · false
返回值
- F & { cancel: () => void }
一个延迟调用原始回调的防抖函数。它还包含一个用于取消任何待执行防抖调用的
cancel方法。
示例
tsx
import { useState } from 'react';
import { useDebounce } from 'react-simplikit';
export function SearchInput() {
const [query, setQuery] = useState('');
const [submittedQuery, setSubmittedQuery] = useState('');
const debouncedSearch = useDebounce(setSubmittedQuery, 300);
return (
<section>
<label>
Search
<input
value={query}
onChange={event => {
setQuery(event.target.value);
debouncedSearch(event.target.value);
}}
/>
</label>
<output aria-live="polite">{submittedQuery}</output>
<button type="button" onClick={() => debouncedSearch.cancel()}>
Cancel pending update
</button>
</section>
);
}