首页 > 其他分享 >在vue中定义一个防抖ref

在vue中定义一个防抖ref

时间:2024-06-20 11:33:08浏览次数:22  
标签:防抖 vue AI value ChatMoney ref

本文由 ChatMoney团队出品

为什么ref要实现防抖

在vue的开发过程中,我们通常会使用到ref,但在我们需要对一个频繁的赋值操作做防抖操作时,我们通常只能通过编写一个独立的防抖函数来实现,这样相对会多一些步骤(麻烦一些)。例如我们给一个即时搜索框的input实现防抖输入(即在输入文本n秒之后才触发搜索,避免频繁请求后端接口浪费资源)时,我们不仅不能使用v-model,而且还要定义一个input事件和防抖函数,非常之繁琐。

此时,我有一个简洁的方法,就是我们可以自定义一个带有防抖功能的ref函数来实现给响应式数据赋值时就实现防抖,这样不仅可以直接使用v-model来实现实时更新,而且不需要再编写任何方法。

原理

在vue中,ref函数其实就是创建了一个代理对你定义的一个变量的操作进行拦截和更新。在vue3中,提供了一个customRef方法,这个方法可以自定义一个ref函数,我们只需要对这个ref函数进行小小的改造即可实现我们想要的效果。

代码实现

// utils/helper.ts
import { customRef } from "vue";

export const debounceRef = (value: any, duration: number = 500) => {
    return customRef((track, trigger) => {
        let timeout: any;
        return {
            get() {
                track();
                return value;
            },
            set(newValue) {
                clearTimeout(timeout);
                // 延迟派发更新
                timeout = setTimeout(() => {
                    value = newValue;
                    trigger();
                }, duration);
            }
        }
    })
}

使用

使用方式与原版ref无异,只是我们自定义的ref能实现防抖功能

import { debounceRef } from '@/utils/helper'

const value: string = debounceRef("")

关于我们

本文由ChatMoney团队出品,ChatMoney专注于AI应用落地与变现,我们提供全套、持续更新的AI源码系统与可执行的变现方案,致力于帮助更多人利用AI来变现,欢迎进入ChatMoney获取更多AI变现方案!

标签:防抖,vue,AI,value,ChatMoney,ref
From: https://www.cnblogs.com/ChatMoney/p/18258329

相关文章

  • 解决使用vue-awesome-swiper,loop设置为true点击失效问题
    <template><divclass="app-container":class="[pageMode==='pageMode2560'?'pageMode2560':'']"><divclass="tag—title">物联感知</div><......
  • Java项目-基于SpringCloud+springboot+vue的分布式架构网上商城系统(源码+数据库+文档
    源码获取:https://download.csdn.net/download/u011832806/89440647基于SpringCloud+SpringBoot+Vue的分布式架构网上商城系统   开发语言:Java   数据库:MySQL   技术:SpringCloud+SpringBoot+MyBatis+Vue.js+eureka   工具:IDEA/Ecilpse、Navicat、Maven经......
  • Java项目-基于ssm+vue的大学生兼职跟踪系统(源码+数据库+文档)​
    如需完整项目,请私信博主基于ssm+Vue的大学生兼职跟踪系统开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven本文以Java为开发技术,实现了一个大学生兼职跟踪系统。大学生兼职跟踪系统的主要实现功能包括:管理员:首页、个人中心、商......
  • Java项目-基于springboot+vue的学习平台(源码+数据库+文档)​
    源码获取:https://download.csdn.net/download/u011832806/89456223基于SpringBoot+Vue的学习平台开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括学习平台......
  • vue(vue.js) 监视属性与深度监视
    原文链接:vue(vue.js)监视属性与深度监视–每天进步一点点(longkui.site) 1.监视属性监视属性:监视某个属性的变化小案例:<!DOCTYPEhtml><htmllang="en"><body> <divid="root"><h2>今天天气很{{hot?'热':'冷'}}</h2&g......
  • Vue3 状态管理 - Pinia,超详细讲解!
    前言:哈喽,大家好,我是前端菜鸟的自我修养!今天给大家分享【Vue3状态管理-Pinia】,超详细讲解!并提供具体代码帮助大家深入理解,彻底掌握!原创不易,如果能帮助到带大家,欢迎收藏+关注哦......
  • 基于Java+Vue前后端分离在线考试系统(源码+LW+PPT+部署教程)
    博主介绍:✌全网粉丝10W+平台特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于毕业项目实战✌一、作品包含源码+数据库+设计文档LW+PPT+全套环境和工具资源+部署教程二、项目技术前端技术:Ht......
  • PhantomReference 和 WeakReference 究竟有何不同
    本文基于OpenJDK17进行讨论,垃圾回收器为ZGC。提示:为了方便大家索引,特将在上篇文章《以ZGC为例,谈一谈JVM是如何实现Reference语义的》中讨论的众多主题独立出来。PhantomReference和WeakReference如果仅仅从概念上来说其实很难区别出他们之间究竟有何不同,比如,......
  • vue3的computed计算属性返回值注解
    //语法结构:computed<返回值的类型>()列子//定义数据constcuont=ref(0)typeItem={id:stringname:stringprice:number}constlist=ref<Item[]>([{id:'1001',name:'男鞋',price:888},{id:'1002',name:'女鞋......
  • vue3的defineProps接收类型注解
    //这是没有用ts语法接收的props参数defineProps({color:String,size:{type:String,required:false,default:'middle'},})//TS语法//格式:withDefaults(defineProps<类型>(),{默认值名:默认值})第一种写法:withDefa......