利用自定义Ref实现防抖

防抖(Debounce)是一种常见的前端优化技术,用于限制函数频繁触发。本文通过自定义 ref 可以将其封装为可复用的逻辑。

防抖原理

防抖的核心是延迟执行函数,若在延迟时间内再次触发,则重新计时。通常用于输入框搜索、窗口大小调整等场景。

自定义防抖 ref 实现

以下是一个基于 Vue 3 的自定义防抖 ref 实现示例:

javascript 复制代码
import { customRef } from 'vue'

/**
 * 创建一个防抖的响应式引用
 * 
 * @param {*} value - 初始值
 * @param {number} [delay] - 防抖延迟时间(毫秒)
 * @returns 防抖后的响应式引用
 */
function useDebouncedRef(value, delay) {
  let timeout
  return customRef((track, trigger) => {
    return {
      get() {
        // 依赖收集
        track()
        return value
      },
      set(newValue) {
        clearTimeout(timeout)
        timeout = setTimeout(() => {
          value = newValue
          // 派发更新
          trigger()
        }, delay)
      }
    }
  })
}

使用示例

在 Vue 组件中使用自定义防抖 ref:

javascript 复制代码
import { useDebouncedRef } from './useDebouncedRef'

export default {
  setup() {
    const searchQuery = useDebouncedRef('', 300)

    return {
      searchQuery
    }
  }
}

实现效果

输入框内容变化时,searchQuery 不会立即更新,而是在用户停止输入 300 毫秒后才会触发更新。这能有效减少不必要的计算或请求。

注意事项

  1. 延迟时间需根据实际场景调整,过长会影响用户体验,过短则失去防抖意义。
  2. 确保在组件卸载时清除定时器,避免内存泄漏。
  3. 可结合 watch 监听防抖后的值变化,执行相应逻辑。

这种方法将防抖逻辑封装为可复用的 ref,使代码更清晰且易于维护。

参考文献

  1. 2.84 Chb:/ 06/03 w@F.Uy 利用自定义ref实现防抖 # JavaScript # 前端开发工程师 # 编程 # 程序员 # web前端 https://v.douyin.com/-Pg4Yee_t7w/ 复制此链接,打开Dou音搜索,直接观看视频!
相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万3 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋3 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁3 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95273 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大3 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师3 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学3 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端