利用Vue3的新API(customRef)实现防抖效果

customRef是创建一个自定义的 ref,然后显式声明对其依赖追踪和更新触发的控制方式。因为ref是直接更新的,数据修改会马上更新,而customRef可以认为控制更新的过程,比如可以利用这个api控制 空格输入限制、数据更新速度控制、违规内容、emoji输入限制等等

下面用customRef实现一个 数据更新带防抖效果的hook

import { customRef } from "vue"

export default function <T>(initValue: T, delay: number = 1000) {
  let timer: number
  let delayValue = customRef((track, trigger) => {
    return {
      get: () => {
        track() //核心,告诉Vue持续关注这个值
        return initValue
      },
      set: (value: T) => {
        clearTimeout(timer)
        timer = setTimeout(() => {
          initValue = value
          trigger() //核心,告诉Vue持续关注这个值要更新了
        }, delay)
      },
    }
  })
  return { delayValue }
}

使用这个hook

//.vue文件
<template>
    <div>{{ name }}</div>
    <input v-model="name" placeholder="请输入名称">
</template>

<script setup lang='ts' name='Layout'>
import useDelayRef from '@/hooks/useDelayRef';
let { delayValue: name } = useDelayRef<string>('Ashley', 3000)
</script>

ps:简单记录,如有不恰当之处,欢迎交流

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值