import React from 'react' ; param { Function } func param { number } delay param { boolean } cleanUp export function useDebouncedFunction ( func , delay , cleanUp ? ) { const timeoutRef = React . useRef < number > ( ) ; /**
     * Очистка таймера
     */ function clearTimer ( ) { if ( timeoutRef . current ) { clearTimeout ( timeoutRef . current ) ; timeoutRef . current = undefined ; } } /**
     * Очищаем таймер при анмаунте компонента, если cleanUp выставлен в true
     * и тем самым отменяем последний запланированный вызов
     */ React . useEffect ( ( ) => ( cleanUp ? clearTimer : undefined ) , [ cleanUp ] ) ; return ( ... args ) => { clearTimer ( ) ; timeoutRef . current = setTimeout ( ( ) => func ( ... args ) , delay ) ; } ; }