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

`customRef` 在实战中的使用:防抖、计算属性缓存和异步数据获取

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

在 Vue3 中,customRef 允许你创建自定义的响应式引用,这为你提供了对依赖追踪和触发更新的完全控制。

使用场景

  • 防抖和节流:在处理输入框等频繁触发的事件时,可以使用 customRef 实现防抖或节流,以减少不必要的更新。
  • 计算属性的缓存:可以使用 customRef 来实现自定义的计算属性,这些属性只在相关依赖发生变化时重新计算。
  • 异步数据获取:在需要根据异步数据创建响应式引用时,customRef 可以帮助管理数据的响应性。

示例

防抖

import { customRef } from 'vue';function useDebouncedRef(value, delay) {
let timeout;
return customRef((track, trigger) => {
return {
get() {
track();
return value;
},
set(newValue) {
clearTimeout(timeout);
timeout = setTimeout(() => {
value = newValue;
trigger();
}, delay);
}
};
});// 使用
const debouncedInput = useDebouncedRef('', 500);

计算属性的缓存

import { customRef, watchEffect } from 'vue';function useComputedRef(getter) {
let value;
let dirty = true;
return customRef((track, trigger) => {
watchEffect(() => {
if (dirty) {
value = getter();
dirty = false;
}
track();
});
return {
get() {
if (dirty) {
value = getter();
dirty = false;
}
return value;
},
set(newValue) {
value = newValue;
dirty = true;
trigger();
}
};
});// 使用
const count = ref(0);
const doubled = useComputedRef(() => count.value * 2);

异步数据获取

import { customRef } from 'vue';function useAsyncRef(asyncFn) {
let value;
let loading = true;
asyncFn().then(result => {
value = result;
loading = false;
}).catch(error => {
console.error(error);
loading = false;
});
return customRef((track, trigger) => {
return {
get() {
track();
return value;
},
set(newValue) {
value = newValue;
trigger();
}
};
});// 使用
const asyncData = useAsyncRef(fetchSomeData);

总结

customRef 提供了一种创建自定义响应式引用的方式,它允许开发者实现更复杂的数据响应逻辑。通过 customRef,你可以控制何时进行依赖追踪,何时触发更新,以及如何处理数据的缓存和异步获取。这在需要精细控制响应式行为的场景中非常有用。

相关文章:

  • 广州华锐互动:以技术创新引领虚拟现实体验新高度
  • 基于机器学习的侧信道分析(MLSCA)Python实现(带测试)
  • 【Linux】Ubuntu 24.04 远程桌面控制
  • RA4M2开发涂鸦模块CBU(2)----配置按键开启LED
  • 神经中枢革命:对象模型耦合CMMM,AI进化引擎重塑PLM-实现智能工厂从卓越级到领航级的自驱跃迁,打造制造业数字进化操作系统
  • 【批量文件查找】根据文件名清单一次性查找多个文件复制到指定位置,批量查找文件的使用步骤和注意事项
  • WevServer实现:异步日志写与HTTP连接
  • [muduo] ThreadPool | TcpClient | 异步任务 | 通信测试
  • 基于Python、tkinter、sqlite3 和matplotlib的校园书店管理系统
  • SimpleITK——创建nrrd体素模型
  • 电子电气架构 --- 实时系统评价的概述
  • 实战-通过Hutool实现双ID链法
  • (二)yolov5——模型检测
  • 华为云 Flexus+DeepSeek 实战:华为云单机部署 Dify-LLM 开发平台全流程指南【服务部署、模型配置、知识库构建全流程】
  • Mac电脑-触摸板增强工具-BetterTouchTool
  • ZZNU大一下 英语选填期末复习
  • 深入解析ID3算法:信息熵驱动的决策树构建基石
  • Python元组及字符串
  • 微处理器原理与应用篇---计算机系统的结构、组织与实现
  • 七、Redis的持久化策略
  • 户外网站 整站下载/打开网站搜索
  • 技术支持 嘉兴网站建设/新手怎么做电商
  • 广告行业网站建设方案/优化关键词是什么意思
  • 百度有个学习的网站建设叫什么/推广小程序
  • 内蒙古建设厅门户网站/信息服务平台有哪些
  • 企业做网站的费用账务如何处理/投放广告的渠道有哪些