useEffect 会在每轮渲染结束后执行,在state发生改变时,也会重新render。因而,这里的state中状态变化时debounce 函数就会重新生成一次,其内部逻辑就会执行一次。所以其就没有起到作用
用 ref 保存一下防抖函数,后面再触发useEffect时,就不会生成新的防抖函数了
使用: getData.current(name, age)
卸载 usePrivateDebounce.current.cancel()
import _ from 'lodash';
const usePrivateDebounce = (func: any, wait: number | undifind, options?:any) => {
const privateRef = useRef<any>(null);
if (!privateRef.current) {
privateRef.current = _.debounce(fun, wait, options);
}
return privateRef;
};
export default usePrivateDebounce;
-----
const getData = usePrivateDebounce((pName: string, pAge: number) => { console.log('11', pName, pAge) }, 2000);
useEffect(() => {
getData.current(name, age)
}, [name, age])