useDebounce
约 898 字大约 3 分钟
2025-08-23
接口定义
DebounceOptions
防抖函数的配置选项接口:
delay: 延迟时间(毫秒),默认300msimmediate: 是否在首次调用时立即执行,默认falsemaxWait: 最大等待时间(毫秒),防止长时间不执行,默认为delay的3倍
DebouncedFunction<T>
防抖函数返回值类型:
- 防抖后的函数本身
flush: 立即执行函数,忽略防抖cancel: 取消当前的防抖等待isPending: 当前是否正在等待执行
核心方法
useDebounce<T>(fn, options)
功能:通用防抖函数,用于任意函数的防抖处理
参数:
fn: 要进行防抖处理的函数options: 防抖配置选项
返回值:包含防抖函数和控制方法的对象
内部机制:
- 使用
setTimeout实现延迟执行 - 支持立即执行选项(
immediate) - 设置最大等待时间(
maxWait)防止长时间不执行 - 提供清理定时器、立即执行和取消执行的方法
使用场景:搜索输入、窗口调整、按钮点击等需要避免频繁触发的场景
响应式相关方法
useDebouncedWatch<T>(source, fn, options)
功能:响应式值的防抖组合式函数,专门用于监听响应式数据的变化
参数:
source: 要监听的响应式值(Ref)fn: 值变化时执行的回调函数options: 防抖配置选项
返回值:
stop: 停止监听函数flush: 立即执行当前等待的函数cancel: 取消当前等待的执行isPending: 当前是否正在等待执行
使用场景:监听搜索框、筛选条件等响应式数据的变化
useDebouncedRef<T>(initialValue, callback, options)
功能:用于表单输入的防抖组合式函数,专门为搜索和表单场景优化
参数:
initialValue: 初始值callback: 值变化时的回调函数options: 防抖配置选项
返回值:
value: 响应式值,可直接在模板中使用v-model绑定stop: 停止监听flush: 立即执行当前等待的函数cancel: 取消当前等待的执行isPending: 当前是否正在等待执行
使用场景:搜索框输入防抖、表单输入验证防抖
异步处理相关方法
useDebouncedAsync<T>(asyncFn, options)
功能:异步函数的防抖处理,专门用于处理API调用等异步操作
参数:
asyncFn: 异步函数options: 防抖配置选项
返回值:
execute: 执行防抖后的异步函数flush: 立即执行cancel: 取消执行isPending: 是否正在等待执行isLoading: 是否正在加载(异步操作执行中)error: 错误信息data: 最后一次成功的结果
内部机制:
- 包装异步函数以处理加载状态和错误处理
- 提供完整的异步操作状态管理
- 支持防抖控制和状态查询
使用场景:API搜索调用、异步数据获取、需要防抖的异步操作
技术特点
- 类型安全:完整的TypeScript类型定义
- 响应式集成:与Vue的响应式系统完美集成
- 灵活配置:支持多种防抖选项配置
- 状态管理:提供完整的执行状态信息
- 错误处理:异步版本包含错误处理机制
- 内存安全:自动清理定时器,避免内存泄漏
使用建议
- 搜索场景:使用
useDebouncedRef或useDebouncedAsync - 事件处理:使用
useDebounce包装事件处理函数 - 数据监听:使用
useDebouncedWatch监听响应式数据变化 - API调用:使用
useDebouncedAsync处理异步请求
版权所有
版权归属:Evoliant
许可证:MIT