import { useEffect, useState } from 'react';
export default function useDebounce(text: string, delay: number) {
const [value, setValue] = useState('');
useEffect(() => {
const timerId = setTimeout(() => {
setValue(text);
}, delay);
return () => {
clearTimeout(timerId);
};
}, [text, delay]);
return value;
}
我曾经制作并使用过useDebounce
个挂钩.
但是,在ReSize事件中使用useDebounce
有一些问题.
useDebounce hook
必须在组件的顶部运行,因为它在内部使用useEffect.
但是,RESIZE函数被设置为在useEffect上运行,如下所示.
此外,上面的代码将值作为一个因素,但我认为我们需要将其作为回调接收才能使用下面的代码.
useEffect(() => {
const handler = () => {
if (liRef.current) setWidth(liRef.current.clientWidth);
};
window.addEventListener('resize', handler);
return () => window.removeEventListener('resize', handler);
}, []);
如何使用上面的代码来利用现有的useDebback?