Vue3 组合式Api之customRef实现防抖功能

本文介绍了Vue3中利用customRef实现防抖功能的原理和实践。防抖技术用于限制频繁触发的事件,确保在设定的时间间隔内只执行一次。文中展示了如何结合customRef和v-model来创建一个具有防抖效果的功能,并提供了效果展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

什么是防抖?
 防抖就是对于频繁触发的事件添加一个延时同时设定一个最小触发间隔,如果触发间隔小于设定的间隔,则清除原来的定时,重新设定新的定时;如果触发间隔大于设定间隔,则保留原来的定时,并设置新的定时;
 防抖的结果就是频繁的触发转变为触发一次。

使用customRef实现防抖

作用:创建一个自定义的 ref,并对其依赖项跟踪和更新触发进行显式控制。该函数有两个参数: track 和 trigger 。
使用自定义 ref 通过 v-model 实现 防抖 示例:

<template>
  <input type="text" v-model="name" />
  <h3>{{ name }}</h3>
</template>

<script>
import { defineComponent, customRef } from 'vue'

export default defineComponent({
  setup() {
    // const name = ref('hello')    // 此时ref是Vue提供的ref
    // 自定义的ref  名为:myRef(ref本质就是一个函数)
    function myRef(value, delay) {
      let timer
      return customRef((track, trigger) => {
        return {
          get() {
            // 通知vue追踪数据value的变化
            track()
            return value
          },
          set(newValue) {
            clearTimeout(timer)
            timer = setTimeout(() => {
              value = newValue
              // 通知vue去重新解析模版
              trigger()
            }, delay)
          },
        }
      })
    }
    const name = myRef('', 500)
    return {
      name
    }
  },
})
</script>

效果展示:

1650460871249670

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值