Vue3:自定义customRef

ops/2024/9/24 17:38:29/

目录

一.性质

1.自定义性

2.工厂函数参数

3.track 和 trigger 函数

二.作用

1.防抖/节流

2.异步更新

3.条件性更新

4.精细控制依赖追踪

5.优化性能

三.使用

1.ts组件

vue.%E7%BB%84%E4%BB%B6-toc" style="margin-left:80px;">2.vue.组件

四.代码

1.ts代码

vue%E4%BB%A3%E7%A0%81-toc" style="margin-left:80px;">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组件

vue.%E7%BB%84%E4%BB%B6">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}
}

vue%E4%BB%A3%E7%A0%81">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.ppmy.cn/ops/115381.html

相关文章

Scrapy爬虫框架 Pipeline 数据传输管道

在网络数据采集领域&#xff0c;Scrapy 是一个非常强大的框架&#xff0c;而 Pipeline 是其中不可或缺的一部分。它允许我们在数据处理的最后阶段对抓取的数据进行进一步的处理&#xff0c;如清洗、存储等操作。 本教程将详细介绍如何在 Scrapy 中使用 Pipeline&#xff0c;帮…

【云原生监控】Prometheus之Alertmanager报警

Prometheus之Alertmanager报警 文章目录 Prometheus之Alertmanager报警概述资源列表基础环境一、部署Prometheus服务1.1、解压1.2、配置systemctl启动1.3、监控端口 二、部署Node-Exporter2.1、解压2.2、配置systemctl启动2.3、监听端口 三、配置Prometheus收集Exporter采集的数…

【MySQL】使用C语言连接数据库

看到标题&#xff0c;可能会疑惑&#xff0c;我们学习的不是C吗&#xff0c;为什么使用C语言去连接数据库呢??实际上&#xff0c;这两种语言都可以连接数据库&#xff0c;但是C语言提供的API没有进行封装&#xff0c;更有利于我们学习数据库连接。面向API编程&#xff0c;哈哈…

JS 的行为设计模式:策略、观察者与命令模式

JS 的行为设计模式&#xff1a;策略、观察者与命令模式 在软件开发中&#xff0c;设计模式是解决特定问题的通用解决方案。行为设计模式专注于对象之间的通信和职责分配。本文将介绍三种常用的行为设计模式&#xff1a;策略模式、观察者模式和命令模式&#xff0c;以及它们的主…

Android中的引用类型:Weak Reference, Soft Reference, Phantom Reference 和 WeakHashMap

在Android开发中&#xff0c;内存管理是一个非常重要的话题。为了更好地管理内存&#xff0c;Java和Android提供了多种引用类型&#xff0c;包括Weak Reference、Soft Reference、Phantom Reference以及WeakHashMap。这些引用类型在不同的场景下可以帮助我们更有效地管理内存&a…

【IDEA配置Maven环境】

在IDEA欢迎界面 选择 IDEA中 Customize > ALLSettings > Build,Execution,Deployment > Build Tools > Maven

汽车软件开发之敏捷开发

一、前言 目前汽车电子产品&#xff0c;特别是汽车几大域控&#xff08;如&#xff1a;智能座舱、智能驾驶、智能网联、车身控制&#xff09;市场竞争激烈&#xff0c;消费者对汽车的需求逐渐多元化和个性化&#xff0c;用户对座舱和智驾产品的要求也越来越高。他们不仅要求产…

c++249多态

#include<iostream> using namespace std; class Parent { public:Parent(int a){this->a a;cout << " Parent" << a << endl;} public:virtual void print()//在子类里面可写可不写 {cout << "Parent" <<a<&l…