Vue3:自定义customRef

目录

一.性质

1.自定义性

2.工厂函数参数

3.track 和 trigger 函数

二.作用

1.防抖/节流

2.异步更新

3.条件性更新

4.精细控制依赖追踪

5.优化性能

三.使用

1.ts组件

2.vue.组件

四.代码

1.ts代码

2.vue代码

五.效果


在 Vue 3 中,customRef 是一个用于创建自定义响应式引用的函数。它允许开发者对依赖项的追踪和更新触发进行显式控制,从而实现更复杂的响应式逻辑。以下是 customRef 的性质与作用:

一.性质

1.自定义性

 customRef 允许开发者自定义 ref 的行为,包括依赖项的追踪和更新触发。可以使用customRef来创建带有自定义验证逻辑的响应式引用,确保只有在满足特定条件时才认为输入有效。

2.工厂函数参数

customRef 接收一个工厂函数作为参数,该函数需要返回一个包含 get 和 set 方法的对象。对于一些特殊的交互逻辑,如拖拽排序、实时编辑等功能,customRef提供了足够的灵活性来实现这些复杂的交互需求。

3.track 和 trigger 函数

工厂函数接收两个参数,即 track 和 trigger 函数,分别用于收集依赖项和触发更新。

二.作用

1.防抖/节流

在用户输入或滚动事件中,频繁触发的事件可能会导致性能问题。使用customRef可以实现防抖或节流功能,从而减少不必要的计算和渲染。例如,在搜索框输入时,可以设置一个延迟时间来防止每次键盘输入都触发搜索请求。

2.异步更新

当需要根据某个异步操作的结果来更新响应式数据时,可以使用customRef来实现。例如,从服务器获取数据并更新UI元素。

3.条件性更新

在某些情况下,可能希望只有当满足特定条件时才更新视图。通过customRef,可以在set方法中添加逻辑判断,仅在条件满足时才触发更新。

4.精细控制依赖追踪

对于复杂的依赖关系,可能需要更细粒度的控制。customRef允许显式地标记依赖项和触发更新,适用于需要精确控制响应式行为的场景。

5.优化性能

通过避免不必要的响应式转换和更新,customRef可以帮助提高应用的性能。特别是在处理大量数据或高频更新的情况下。

三.使用

1.ts组件

2.vue.组件

四.代码

1.ts代码


import { customRef } from "vue";export default function(initValue:string,delay:number){// 使用Vue提供的customRef定义响应式数据let timer:number// track(跟踪)、trigger(触发)let text = customRef((track,trigger)=>{return {// get何时调用?—— text被读取时get(){track() //告诉Vue数据text很重要,你要对text进行持续关注,一旦text变化就去更新return initValue},// set何时调用?—— text被修改时set(value){clearTimeout(timer)timer = setTimeout(() => {initValue = valuetrigger() //通知Vue一下数据text变化了}, delay);}}})return {text}
}

2.vue代码

<template><div class="app"><h4>{{ text }}</h4><input type="text" v-model="text"></div>
</template><script setup lang="ts" name="App">import customRef from './customRef'// 使用useMsgRef来定义一个响应式数据且有延迟效果let {text} = customRef('请输入信息',3000)</script><style scoped>
.app{background-color: orange;width: 500px;
}
input{width: 350px;height: 60px;font-size: 24px;
}
h4{font-size: 24px;color: black;
}</style>

五.效果

输入信息三秒后,显示效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/431359.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一、机器学习算法与实践_04信息论与决策树算法笔记

1 信息论基础知识介绍 信息论是运用概率论与数理统计的方法&#xff0c;去研究信息、信息熵、通信系统、数据传输、密码学、数据压缩等问题的应用数学学科&#xff0c;熵&#xff08;Entropy&#xff09;是信息论中的一个重要概念&#xff0c;由克劳德香农&#xff08;Claude …

深入理解端口、端口号及FTP的基本工作原理

FTP是TCP/IP的一种具体应用&#xff0c;FTP工作在OSI模型的第七层&#xff0c;TCP模型的第四层上&#xff0c;即应用层&#xff0c;FTP使用的是传输层的TCP传输而不是UDP&#xff0c;这样FTP客户在和服务器建立连接前就要经过一个被广为熟知的“三次握手”的过程&#xff0c;其…

制作炫酷个人网页:用 HTML 和 CSS3 展现你的风格

你是否觉得自己的网站应该看起来更炫酷&#xff1f;今天我将教你如何使用 HTML 和 CSS3 制作一个拥有炫酷动画和现代设计风格的个人网页&#xff0c;让它在任何设备上看起来都无敌酷炫&#xff01; 哈哈哈哈哈哈哈哈,我感觉自己有点中二哈哈哈哈~ 目录 炫酷设计理念构建 HTML …

Unity 热更新(HybridCLR+Addressable)-设置打包路径和加载路径、打开Hosting服务、打包

四、设置打包和加载路径 五、打开Hosting服务 六、打包 打包完成后路径在Assets同级目录下的ServerData 但是目前没有资源文件对比 修改上面设置后再次打包 里面多了哈希和JSON文件&#xff0c;这俩个就是用于资源对比

若依生成主子表

一、准备工作 确保你已经部署了若依框架&#xff0c;并且熟悉基本的开发环境配置。同时&#xff0c;理解数据库表结构对于生成代码至关重要。 主子表代码结构如下&#xff08;字表中要有一个对应主表ID的字段作为外键&#xff0c;如下图的customer_id&#xff09; -- ------…

无线感知会议系列【4】【基于WiFi和4G/5G的非接触无线感知:挑战、理论和应用-2】

前言&#xff1a; 本篇重点分享一下该论文 《Human Respiration Detection with Commodity Wifi Devices: Do User Location and Body Orientation Matter》 接 2020年北京智源大会 张大庆老师的一个报告 参考&#xff1a; https://blog.csdn.net/chengxf2/article/detai…

2024 Redis 全部

1. 单机部署 1.1 检查环境&#xff0c;创建目录。 # 本地运行&#xff0c;不需要考虑安装的原因&#xff0c;可以卸载防火墙 # 关闭防火墙 systemctl stop firewalld.service# 查看防火强状态 firewall-cmd --state# redis 是基于gcc 环境的&#xff0c;查看是否有 gcc 环境 …

Bug:ThreadPoolTaskScheduler搭配CronTask完成定时任务,关闭scheduler后CronTask任务仍然执行?

【问题】执行下面代码后&#xff0c;关闭ThreadPoolTaskScheduler&#xff0c;CronTask仍然继续执行。 Configuration public class config {Beanpublic String getString() throws InterruptedException {Runnable runnable () -> {try {System.out.println("hello r…

科研绘图系列:R语言分组堆积图(stacked barplot)

文章目录 介绍加载R包导入数据数据预处理画图导出数据系统信息介绍 堆积图是一种数据可视化图表,它通过将不同类别的数据以堆叠的形式展现在同一个图表中,来展示各个类别之间的相对大小和它们之间的总和。堆积图可以是柱状图、条形图或面积图的形式,其中每个堆叠的块或区域…

Servlet入门:服务端小程序的初试(自己学习整理的资料)

目录 一.前言 二.建立基础结构​编辑 三.具体步骤 找到Tomcat文件并打开Tomcat。 在webapps中创建一个自己的文件夹。 在classes中新建一个Java文件。 在lib中导入需要的jar文件包。 配置环境变量 在Java文件的目录下打开cmd并输入 javac -d . HelloServlet.java进行…

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第三篇-着色器光照】

在前两篇文章中&#xff0c;我们分别拆解描述了实现原理&#xff0c;并进行了基础的着色器制作。在这一篇文章中&#xff0c;我们将为它实现光照效果 简单的概述 当光线射入体积时&#xff0c;随着光线射入距离的增加&#xff0c;体积中的介质会对光线产生反射和吸收作用&…

【C++前缀和 状态压缩】1177. 构建回文串检测|1848

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 位运算、状态压缩、枚举子集汇总 LeetCode 1177. 构建回文串检测 难度分&#xff1a;1848 给你一个字符串 s&#xff0c;请你对 s 的子串进行检测。 每次检测&#x…

望繁信科技受邀出席ACS2023,为汽车行业数智化护航添翼

2023年5月25-26日&#xff0c;ACS2023第七届中国汽车数字科技峰会在上海成功举行。此次峰会汇聚了众多汽车领域的顶级专家、产业链代表及企业高管&#xff0c;共同探讨当今汽车产业的转型与未来发展趋势。 作为唯一受邀的流程挖掘厂商代表&#xff0c;望繁信科技携最新行业优势…

[Golang] Context

[Golang] Context 文章目录 [Golang] Context什么是context创建context创建根context创建context context的作用并发控制context.WithCancelcontext.WithDeadlinecontext.WithTimeoutcontext.WithValue 什么是context Golang在1.7版本中引入了一个标准库的接口context&#xf…

【Web】初识Web和Tomcat服务器

目录 前言 一、认识web 1. 软件架构模式 2. web资源 3. URL请求路径&#xff08;统一资源定位符&#xff09; 二、Tomcat服务器 1. 简介 2. tomcat服务器的目录结构 3.使用tomcat服务器启动失败的常见原因 3.1 端口冲突 3.2 jdk环境变量配置出错 三、使用Tomcat发布…

Python_面向对象属性与方法

Python完全采用了面向对象的思想&#xff0c;是真正面向对象的编程语言&#xff0c;完全支持面向对象的基本功能&#xff0c;例如&#xff1a;继承、多态、封装等。Python中&#xff0c;一切皆对象。我们在前面学习的数据类型、函数等&#xff0c;都是对象。 面向过程和面向对象…

Java | Leetcode Java题解之第430题扁平化多级双向链表

题目&#xff1a; 题解&#xff1a; class Solution {public Node flatten(Node head) {dfs(head);return head;}public Node dfs(Node node) {Node cur node;// 记录链表的最后一个节点Node last null;while (cur ! null) {Node next cur.next;// 如果有子节点&#xff0…

【最基础最直观的排序 —— 选择排序算法】

最基础最直观的排序 —— 选择排序算法 选择排序算法是一种简单直观的排序算法。其基本思想是每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排序元素中继续寻找最小&a…

【JS】Reflect

对象基本方法 JS语法操作对象时&#xff0c;本质上是调用一个内部封装好的函数&#xff0c;该函数中又会调用对象的基本方法&#xff0c;通过官方文档可以看到基本方法。在过去&#xff0c;这些对象的基本方法是不会对外暴露的。 如下面这段代码&#xff0c;使用JS语法给对象赋…

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-20

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-20 1. Multimodal Fusion with LLMs for Engagement Prediction in Natural Conversation Authors: Cheng Charles Ma, Kevin Hyekang Joo, Alexandria K. Vail, Sunreeta Bhattacharya, Alvaro Fern’andez Ga…