1.0 js函数防抖
function debounce(fn, delay = 1000) {
let timerId;
return function (...args) {
clearTimeout(timerId);
timerId = setTimeout(() => {
fn.apply(this, args);
}, delay);
};
}
2.0 vue自定义ref防抖
import { customRef } from 'vue';
export function debounceRef(value, delay = 1000) {
let timerId;
return customRef((track, trigger) => ({
get value() {
// 依赖收集
track();
return value;
},
set value(newValue) {
clearTimeout(timerId);
timerId = setTimeout(() => {
value = newValue;
// 派发更新
trigger();
}, delay);
},
}));
}