| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- import { onUnload } from '@dcloudio/uni-app';
- /**
- * 自定义防抖函数钩子
- * @param {Function} fn 需要防抖执行的函数
- * @param {Number} delay 延迟时间(毫秒)
- * @returns {Function} 经过防抖处理的函数
- */
- export function useDebounceFn(fn, delay = 200) {
- let timer = null;
- const debounced = (...args) => {
- // 如果已有定时器,清除它
- if (timer) clearTimeout(timer);
- // 设置新的定时器
- timer = setTimeout(() => {
- fn.apply(this, args);
- }, delay);
- };
- // 挂载一个 cancel 方法,以便在外部需要时手动清除
- debounced.cancel = () => {
- if (timer) {
- clearTimeout(timer);
- timer = null;
- }
- };
- // 在组件卸载时自动清理定时器,避免内存泄漏
- // try-catch 是为了防止在组件外部(非setup环境)使用时报错
- try {
- onUnload(() => {
- debounced.cancel();
- });
- } catch (e) {
- // 如果不是在组件 setup 中调用,忽略 onUnmounted 错误
- }
- return debounced;
- }
|