当前位置: 首页 > article >正文

vue3中的customRef创建一个自定义的 ref对象

customRef

· 创建一个自定义的 ref,并对其依赖项跟踪和更新触发进行显式控制

· 小案例: 自定义 ref 实现 debounce

<template>
  <div style="font-size: 14px;">
    <input v-model="text" placeholder="搜索关键字"/>
    <p>{{text}}</p>
  </div>
</template>

<script lang="ts">
// customRef:
//   创建一个自定义的 ref,并对其依赖项跟踪和更新触发进行显式控制
//   需求: 自定义 ref 实现 debounce
import {
  defineComponent,
  customRef
} from 'vue'
// vue3.0 版本语法
export default defineComponent({
  setup () {
    // 实现函数防抖的自定义ref
    function useDebouncedRef(value: any, delay = 200) {
      let timeout: number
      return customRef((track, trigger) => {
        return {
          get() {
            console.log('get()')
            // 告诉Vue追踪数据
            track()
            return value
          },
          set(newValue) {
            console.log('set', newValue)
            clearTimeout(timeout)
            timeout = setTimeout(() => {
              value = newValue
              // 告诉vue去触发界面更新
              trigger()
            }, delay)
          }
        }
      })
    }
    const text = useDebouncedRef('')
    
    return {
      text
    }
  },
})
</script>

初始页面显示:

连续输入1111页面显示:

在连续输入了1111之后每次输入set都触发了,而get在输入完成后才最终执行 > 说明防抖生效了。

借助这个思路我们是不是可以通过customRef来自定义ref对象处理数据结果呢?

欢迎关注我的原创文章:小伙伴们!我是一名热衷于前端开发的作者,致力于分享我的知识和经验,帮助其他学习前端的小伙伴们。在我的文章中,你将会找到大量关于前端开发的精彩内容。

学习前端技术是现代互联网时代中非常重要的一项技能。无论你是想成为一名专业的前端工程师,还是仅仅对前端开发感兴趣,我的文章将能为你提供宝贵的指导和知识。

在我的文章中,你将会学到如何使用HTML、CSS和JavaScript创建精美的网页。我将深入讲解每个语言的基础知识,并提供一些实用技巧和最佳实践。无论你是初学者还是有一定经验的开发者,我的文章都能够满足你的学习需求。

此外,我还会分享一些关于前端开发的最新动态和行业趋势。互联网技术在不断发展,新的框架和工具层出不穷。通过我的文章,你将会了解到最新的前端技术趋势,并了解如何应对这些变化。

我深知学习前端不易,因此我将尽力以简洁明了的方式解释复杂的概念,并提供一些易于理解的实例和案例。我希望我的文章能够帮助你更快地理解前端开发,并提升你的技能。

如果你想了解更多关于前端开发的内容,不妨关注我的原创文章。我会不定期更新,为你带来最新的前端技术和知识。感谢你的关注和支持,我们一起探讨交流技术共同进步,期待与你一同探索前端开发的奇妙世界!


http://www.kler.cn/a/147524.html

相关文章:

  • 计算机网络 (3)计算机网络的性能
  • 使用Redis的一些经验总结
  • 蓝桥杯每日真题 - 第14天
  • Javascript_设计模式(二)
  • 探索大规模语言模型(LLM)在心理健康护理领域中的应用与潜力
  • IROS讲座:如何写出受欢迎的论文
  • CCC联盟数字钥匙(一)——UWB MAC概述
  • barcode.js+elementUi——实现二维码的展示——基础积累
  • 21款奔驰GLE350升级迈巴赫踏板 老人小孩 上下车更加简单
  • Figma 插件学习(二)- 常用属性和方法
  • 基于vue的全民生鲜网上商城
  • 前端 HTML 和 JavaScript 的基础知识有哪些?
  • 纯新手发布鸿蒙的第一个java应用
  • Linux telnet命令详解:通过TCP/IP网络连接与管理远程机器(附实例教程和注意事项)
  • Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购、等业务的企业
  • 【JAVA】SpringBoot + mongodb 分页、排序、动态多条件查询及事务处理
  • 开源四轴协作机械臂ultraArm激光雕刻技术案例!
  • 【开源】基于JAVA的衣物搭配系统
  • jmeter使用beanshell
  • AMP State Evolution的计算:以伯努利先验为例
  • Python自动化办公:PDF文件的分割与合并
  • 【Golang】使用泛型对数组进行去重
  • Linux多路转接select,poll
  • 应用密码学期末复习(1)
  • A start job is running for Hold unt…s up (1d 18h 52min 25s / no limit) 如何去掉
  • 【Java Spring】SpringBoot 日志系统