vue3 响应式API customRef()

响应式企业官方网站模板,使用vue全家桶开发 立即下载

使用ref()定义响应式数据:

<template>
  <div>
    <div>{{ inputValue }}</div>
    <input type="text" v-model="inputValue">
  </div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const inputValue = ref('hello')
</script>

使用Vue提供的默认ref()定义响应式数据,当数据发生变化时,Vue 的响应式系统会自动检测到变化,并立即更新相关的页面部分。
在这里插入图片描述



现在,实现如下图所示的需求:当在输入框输入123时,输入结束1秒后,页面才更新。
在这里插入图片描述
<input type="text" v-model="inputValue">将输入框与inputValue进行双向绑定,当用户在输入框中输入数字1,input框的数据瞬间就改变了,在页面上用作展示的<div>{{ inputValue }}</div>也就更新了。

使用ref()定义响应式数据,数据变了,页面就会立即更新。它无法实现数据变了,等开发者做个 什么什么需求 再来改变页面渲染。

使用Vue提供的customRef()来实现需求。

customRef()

customRef()创建一个自定义的 ref,显式声明对其依赖追踪和更新触发的控制方式。

类型

function customRef<T>(factory: CustomRefFactory<T>): Ref<T>
type CustomRefFactory<T> = (
  track: () => void,
  trigger: () => void
) => {
  get: () => T
  set: (value: T) => void
}

customRef() 预期接收一个工厂函数作为参数,这个工厂函数接受 track 和 trigger 两个函数作为参数,并返回一个带有 get 和 set 方法的对象。

  • 一般来说,track() 应该在 get() 方法中调用,而 trigger() 应该在 set() 中调用。
  • get() 在数据读取时调用,用于返回值。
  • set() 在数据被修改时调用,用于更新值并触发更新。
  • track():用于通知 Vue 的响应式系统,当前数据很重要,要持续跟踪数据,一旦数据发生变化,立即更新
  • trigger():用于通知 Vue 的响应式系统,数据发生了变化。

通过自定义响应式引用,可以控制何时触发依赖追踪(track)和响应式更新(trigger)。这对于实现一些特殊的逻辑或优化性能非常有用。

使用customRef()实现函数防抖

使用customRef()实现需求:当在输入框输入123时,输入结束1秒后,页面才更新。

这个功能其实就是函数防抖。

创建一个防抖ref,只在最近一次 set 调用后的一段固定间隔后再调用:

<template>
  <div>
    <div>{{ inputValue }}</div>
    <input type="text" v-model="inputValue">
  </div>
</template>
<script setup lang="ts">
import { customRef } from 'vue';
// 使用customRef定义响应式数据
let value = 'hello'
let timer:number
// track-跟踪  trigger-触发
const inputValue = customRef((track, trigger) => {
  return {
    // get:数据被读取时调用
    get() {
      track()  // 通知响应式系统正在读取数据,告诉响应式系统数据很重要,要对数据保持持续跟踪,一旦数据发生变化,就更新
      return value
    },
    // set:数据被修改时调用
    set(newValue) {
      if(timer){
        clearTimeout(timer)
      }
      timer = setTimeout(() => {
        value = newValue
        trigger()  // 通知响应式系统数据已发生变化
      }, 1000) 
    }
  }
})
</script>

把这个方法封装成一个hooks:

import { customRef } from 'vue';

export default function useDataRef(initValue: string, delayTime: number) {
  let value = initValue
  let timer: number

  return customRef((track, trigger) => {
    return {
      // get:数据被读取时调用
      get() {
        track()  // 通知响应式系统正在读取数据,告诉响应式系统数据很重要,要对数据保持持续跟踪,一旦数据发生变化,就更新
        return value
      },
      // set:数据被修改时调用
      set(newValue) {
        if (timer) {
          clearTimeout(timer)
        }
        timer = setTimeout(() => {
          value = newValue
          trigger()  // 通知响应式系统数据已发生变化
        }, delayTime)
      }
    }
  })
}

使用:

<template>
  <div>
    <div>{{ inputValue }}</div>
    <input type="text" v-model="inputValue">
  </div>
</template>
<script setup lang="ts">
import useDataRef from '@/hooks/useDataRef'
const inputValue = useDataRef('hello', 2000)
</script>
MOLDFLOW 2012模流分析基础到实战视频教程 ├ 1第一讲MF软件安装与界面定制及模流前期准备工作及分析流程介绍 ├ 2第二讲MF建模工具条命令讲解与图层的运用 ├ 3第三讲MF网格类型与适应范围及网格划分、诊断、修复与统计 ├ 4第四讲MF中CAD doctor 模块对导入模型的修复方法与实例 ├ 5第五讲MF中常见各种流道浇口及水路的建模方法与外部导入方法上 ├ 6第六讲MF产品模型导入CAD DOCTOR与修复 ├ 7第七讲MF分析序列设定与网格的划分与诊断及修复 ├ 8第八讲MF材料选择与成型工艺参数设定 ├ 9第九讲MF创建浇注系统:主流道、 阅读详情

相关推荐

WinForm多语言切换实战:5分钟搞定中英文界面(附完整代码)

本文提供了WinForm应用实现中英文界面切换的两种高效实战方案。通过利用内置的本地化机制和资源文件,开发者可以在5分钟内为窗体添加多语言支持,并附有完整代码示例,帮助快速应对软件国际化需求。

weixin_29230773的博客 406

vue3的新特性custom renderer

文章转自:https://blog.51cto.com/15077561/2594771 默认的目标渲染平台 在vue3中允许用户自定义目标渲染平台,以往的版本中目标渲染被局限于浏览器dom平台,而现在可以把 vue 的开发模型扩展到其他平台。点击进入官网 Tips:以往解决把 vue 的开发模型扩展到其他平台(Canvas、iOS、Android等等)的方式之一是借助第三方工具例如WEEX(点击进入官网) 我们先来弄懂vue是如何定义默认的目标渲染平台的,也就是说如何将目标渲染

liubangbo的专栏 5911

使用FileZilla在武汉大学IGS数据分析中心下载GNSS数据

2.依次点击如下图标下载到本地并解压安装(按系统选择要下载的版本)

qq_43381998的博客 6041

vue3+antd+customRender在Table当中动态渲染组件

需要使用对应的方法就直接在这个return返回的对象里面定义(record代表每行数据)需要使用对应的组件只需要引入然后再这个h函数里面使用(组件不需要加引号)4. 在对应属性当中利用自定义渲染的组件实现对应的逻辑,这里就用到了。这里的value就是动态绑定的值,然后。3.table组件需要定义响应式的。2.然后引入需要的组件例如说。1、首先需要自己安装好。

2201_75874827的博客 4526

《UVM实战》学习笔记——第三章UVM基础

uvm基础,常见的派生类,config db机制,打印信息等

qq_42135020的博客 5176

2024届数字IC秋招-华为机试-数字芯片-笔试真题和答案(三)(含2022年和2023年)

此部分包含华为机试真题,方向是数字芯片,内容详细包括设计、验证、后端等,大部分题目给出参考答案。华为机试都是从题库里抽题目,所以这些题目还是很有参考性的,甚至是完全一样,可以搜到的。(题目内容较多,将分开编写几个文章)A.错误B.正确参考答案:BA.getB.try_getC.peekD.put参考答案:B。

qq_42135020的博客 1917

Vue3 + Antdv Table 使用customRender自定义列,且返回的数据是多个节点时,渲染失败问题(已解决)

Vue3 + Antdv Table 使用customRender自定义列,且返回的数据是多个节点时,渲染失败问题(已解决)

zhangruilinmoo 2066

制作3D地形图的方法-使用GlobalMapper和3ds Max软件

打开GlobalMapper软件,在菜单栏中选择“文件”>“打开数据文件”,然后选择相应的高程数据文件。在菜单栏中选择“渲染”>“渲染设置”,根据需要进行设置,如分辨率和输出格式。选择地形对象,点击菜单栏中的“渲染”>“材质编辑器”,然后根据需要调整材质属性,如颜色、纹理和光照等。在菜单栏中选择“工具”>“高程栅格和网格”>“创建地形网格”。在菜单栏中选择“文件”>“导出”>“导出栅格格式”。打开3ds Max软件,在菜单栏中选择“文件”>“导入”,然后选择之前导出的地形数据文件。步骤3:导出地形网格。

JqlScala的博客 1535

一文了解customRef 自定义ref使用

自定义ref的使用

jia嘉ioo的博客 1369

基于FPGA的数字图像处理-直方图操作【3.3】

对于固定的位宽和图像分辨率来说,这个计算过程是 可定量的,也就是这个归一化系数是已知的。1.直方图累计和 根据数学定义,直方图累加和的定义是小于指定像素的所有像素 的统计值之和。在实际应用中,处理帧缓存是费时费力费资源的一件事情,在许 多情况下,图像的变换比较慢,在这种情况下的一个近似是当建立当 前帧的直方图统计结果时使用从前一帧得到的映射。由测试结果可见,这两幅过曝光和曝光不足的图像,经过均衡化 之后的效果图差别不大,对比度都非常高,设计代码达到了预期的均 衡目的。累加和的计算情况如图6-28所示。

qq_43416206的博客 1126

【考研高数-高等数学-基础】第一章 函数、极限、连续

第一章 函数、极限、连续 第二章 导数与微分 第三章 微分中值定理及导数应用 第四章 不定积分 第五章 定积分与反常积分 第六章 定积分的应用 第七章 微分方程 第八章 多元函数微分学 第九章 二重积分 第十章 无穷级数 第十一章 向量代数与空间解析几何及多元微分学在几何上的应用 第十二章 多元积分学及其应用 难题: 极限的递推 微分中值定理的证明题 定积分的不等式和等式的证明 重积分的不等式和等式的证明 线面积分的不等式和等...

刘鑫磊 2034

【Vue】Vue 项目前端响应式布局及框架搭建

文章目录Vue 项目前端响应式布局及框架搭建一、项目基本结构二、项目分辨率响应式创建1、flexible.js2、引用 flexible 插件3、修改 flexible 默认配置4、cssrem 插件 (px -> rem)三、项目页面框架搭建1、设置背景图2、设置标题文字3、页面主体部分(1)section 主体部分(2)左、中、右布局(3)左、右图表容器整体插槽(4)左、右各图表容器插槽(5)中间图表容器布局四、图表环境搭建1、Echarts 全局引用2、Axios 全局引用 Vue 项目前..

懂得一千零一种,赋予你失败的方法! 1万+

危废焚烧优化控制系统设计与实现:基于数据驱动的控制参数预测

本文提出了一种基于数据驱动的危险废物焚烧过程优化控制方法。系统利用历史运行数据和实时监测数据,通过深度学习模型预测关键控制参数,实现焚烧过程的智能化控制。系统采用Python开发,结合TensorFlow/PyTorch框架,构建了完整的数据采集、预处理、特征工程、模型训练和实时预测闭环系统。该系统能够处理多变量非线性关系,适应工况变化,从历史数据中学习最优控制策略,相比传统PID控制方法具有显著优势。论文详细介绍了系统架构、算法设计和实现细节,为危废焚烧过程的优化控制提供了有效解决方案。

huanghm88的专栏 206

《Vue3学习手记8》

1.作用:创建一个响应式数据,但只对顶层属性进行响应式处理。3.特点:只跟踪引用值的变化,不关心值内部的属性变化。1.作用:创建一个浅层响应式对象,只会使对象的最顶层属性变成响应式的,对象内部的嵌套属性则不会变成响应式的3.特点:对象的顶层属性是响应式的,但嵌套对象的属性不是。总结通过使用shallowRef()和shallowReactive()来绕开深度响应。

2302_77332005的博客 961

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Vue3中customRef详解

Vue3中的customRef是一个高级响应式API,允许开发者创建自定义的ref对象,精确控制依赖追踪和更新触发。它通过接收一个工厂函数(包含track和trigger参数)来定义get和set方法,适用于防抖、节流、异步处理等复杂场景。 典型应用包括: 防抖Ref:延迟输入更新(如搜索框) 验证Ref:在设置值前进行校验 本地存储同步:自动同步到localStorage 异步Ref:处理API请求 相比普通ref,customRef提供更细粒度的控制,但需手动调用track/trigger。使用时需注意

Listen·Rain的博客 397

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

vue3中的ref,reactive,markRaw,shallowRef,shallowReactive,toRef等API的用法

不需要 → 选markRaw()

CHB_YQM的博客 274

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

VUE3 ——customRef特性与作用

customRef是Vue3提供的一个高级响应式API,用于创建自定义行为的ref对象。它允许开发者自定义ref的 getter 和 setter 逻辑,从而实现特殊的响应式需求。核心特性自定义响应式行为:可以控制数据读取和修改的逻辑完全控制依赖追踪:手动决定何时触发依赖收集和更新通知灵活性高:可实现防抖、节流、延迟更新等高级功能与普通ref兼容:创建的对象可以像普通ref一样使用工作原理customRef接收一个工厂函数作为参数,该函数返回一个包含get和setget()

weixin_63215361的博客 1238

vue3 响应式api中特殊的api

shallowReactive() 函数用于创建一个浅响应式对象,意味着只有对象的顶层属性会被劫持成响应式的,而嵌套的属性不会被劫持成响应式的。在 Vue 3 中,默认情况下,所有的对象都会被追踪并成为响应式对象,即当对象发生变化时,相关的界面会自动更新。这样的设计可以提高性能,因为对于大型的复杂对象,如果每次属性变化都进行递归的响应式处理,会带来很大的性能开销。只能将一层响应式对象转换为普通对象,如果转换的对象存在嵌套的响应式对象,则嵌套的响应式对象仍然是代理对象。如果传入的对象不是响应式对象,

枫ゞ的博客 1371

vue3知识点:customRef

vue3知识点:customRef

刘大猫 2173

vue3基本应用—响应式api

ref 是用来创建响应式引用的主要方法。它通常用于基本数据类型(如字符串、数字、布尔值、对象、数组等)的响应式包装。在模板中可以直接使用,但在 JavaScript 中需要通过 .value 属性来访问或修改它的值 1、ref具有深层次响应式特点,主要针对对象; 2、通过shallowRef创建的响应式,不会深层递归,不具备深层响应式特点; reactive reactive 是用来创建响应式对象的方法,适用于处理对象和数组。reactive对象的属性可以在模板和 JavaScript 中直接访问和修改,不

sqbcsdn的博客 986

Vue3 常用api

在 Vue 3 中,shallowRef和是两个用于响应式编程的 API,它们与 Vue 的响应式系统密切相关。它们的主要目的是在创建响应式对象时提供更灵活的选项,尤其是在处理嵌套对象时。让我们分别了解这两个 API 的作用及其区别。shallowRefshallowRefshallowRefshallowRef.value在 Vue 3 中,readonly和是两个用于创建只读响应式对象的 API。它们允许你在不改变原始对象的情况下,创建一个只读的视图,确保在开发过程中防止不小心的状态修改。

Birdy_x的博客 2227

VUE3中customRef 详解:定义、使用与业务场景

所属范畴customRef是 Vue 3 的内置 API(Vue 2 无此 API,需借助或第三方库实现类似功能),通常在语法中使用,也可在选项式 API 中配合setup()钩子使用。核心作用:突破 Vue 内置ref的默认行为限制,手动控制响应式的两个核心环节:依赖收集:当自定义 ref 被组件模板 / 计算属性使用时,需要手动标记「该位置依赖了这个 ref」;触发更新:当自定义 ref 的值发生变化时,需要手动通知 Vue「依赖该 ref 的位置需要重新渲染」;返回值:调用customRef。

gongyanzi的博客 851

Vue 3 customRef 完全指南:自定义响应式引用的终极教程

深入解析 Vue 3 customRef 的核心概念和实际应用,包含防抖输入框、异步数据加载、数据验证等实用案例,助您掌握自定义响应式引用的完整技巧。

前端开发-前端技术分享 1067

从Vue2到Vue3【四】——Composition API(第四章)

随着Vue 3的发布,我们迎来了一套强大且令人兴奋的组合式API,这为开发者带来了更多灵活性和可维护性。本篇文章细致详细讲解了customRef、provide 与 inject、响应式数据的判断、Composition API 与 Options API的对比,干货满满!

悟其浅而深修,沉其心而精进 6166

vue3响应式

vue3响应式相关api

qq_42880714的博客 6053

Vue3中 响应式 API( shallowReactive、shallowRef、triggerRef 、customRef )详解

一般来说,track() 应该在 get() 方法中调用,而 trigger() 应该在 set() 中调用。customRef() 预期接收一个工厂函数作为参数,这个工厂函数接受 track 和 trigger 两个函数作为参数,并返回一个带有 get 和 set。强制触发依赖于一个浅层 ref 的副作用,这通常在对浅引用的内部值进行深度变更后使用。如果一个对象属性数据,后续功能不会修改该对象中的属性,而是新生对象来替换。创建一个自定义的 ref,显式声明对其依赖追踪和更新触发的控制方式。

明天也要努力的博客 1812
上一篇: vue3 响应式API toRaw() 和 markRaw()
下一篇: vue3 内置组件<Teleport>
fishmemory7sec
博客等级 码龄5年 1165粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值