useDebounce
주 어진 콜백 함수를 디바운스(지연)
처리하여 특정 시간 동안 반복 호출을 방지하는 훅입니다.
Code
Interface
typescript
/**
* @interface DebounceParameters
* @template T - 콜백 함수 타입입니다.
* @param {DebounceParameters[0]} callback - 디바운스할 콜백 함수입니다.
* @param {DebounceParameters[1]} wait - 지연시킬 시간(밀리초)입니다.
* @param {DebounceParameters[2]} options - 옵션 객체입니다.
* @param {AbortSignal} options.signal - 디바운스된 함수를 취소하기 위한 선택적 AbortSignal입니다.
* @param {number} options.maxWait - 최대 대기 시간(밀리초)입니다.
* @param {boolean} options.leading - 첫 번째 호출을 실행할지 여부입니다.
* @param {boolean} options.trailing - 마지막 호출을 실행할지 여부입니다.
*/
type DebounceParameters = Parameters<typeof debounce>;
/**
* @interface DebounceReturnType
* @param {() => void} cancel - 디바운스된 함수의 대기 중인 실행을 취소합니다.
* @param {() => void} flush - 대기 중인 실행이 있는 경우 디바운스된 함수를 즉시 실행합니다.
*/
type DebounceReturnType<T extends (...args: any) => any> = ReturnType<
typeof debounce<T>
>;
typescript
function useDebounce<T extends (...args: any) => any>(
callback: T,
wait: DebounceParameters[1],
options?: DebounceParameters[2]
): DebounceReturnType<T>;
Usage
typescript
import { useState } from 'react';
import { useDebounce } from '@modern-kit/react';
const Example = () => {
const [count, setCount] = useState(1);
const [debouncedCount, setDebouncedCount] = useState(1);
const countUp = () => {
setCount(count + 1);
};
const debouncedCountUp = useDebounce(() => {
setDebouncedCount(debouncedCount + 1);
}, 1000);
return (
<div>
<div style={{ display: "flex" }}>
<button onClick={countUp}>버튼 클릭</button>
<div style={{ width: "50px" }} />
<button onClick={debouncedCountUp}>debounce 버튼 클릭</button>
</div>
<div>
<p>count: {count}</p>
<p>debouncedCount: {debouncedCount}</p>
</div>
</div>
);
};
Example
count: 1
debouncedCount: 1