`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,你可以控制何時進行依賴追蹤,何時觸發更新,以及如何處理數據的緩存和異步獲取。這在需要精細控制響應式行為的場景中非常有用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/911720.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/911720.shtml
英文地址,請注明出處:http://en.pswp.cn/news/911720.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

騰訊混元3D制作角色模型的教程-3

騰訊混元3D中實現角色骨骼綁定與動畫生成的詳細操作指南,結合官方功能說明及實操要點整理: ?? 一、前期準備:模型要求 角色姿態規范 僅支持標準T-pose(大字型站立) 的全身人物模型(如卡通角色)。 非標準姿態或非人形模型(如動物、道具)暫不支持自動綁骨。 模型來源…

React 和 Vue 項目中集成基于 Svelte 的 `Bytemd` 庫 || @bytemd/react` 底層實現原理

Bytemd 并使用Svelte 框架編寫的。Svelte 是一種不同的前端框架,它的核心思想是在編譯時將組件代碼轉換成高效、原生 JavaScript,從而避免運行時虛擬 DOM 的開銷。 理解了這一點,我們就可以深入探討如何在 React 和 Vue 項目中適配 Svelte 編…

【新品解讀】高性能緊湊型 RFSoC FPGA 開發平臺 AXW22,重塑射頻開發體驗

如果您正在煩惱如何在有限的物理空間和預算內,依然實現卓越的射頻帶寬與處理能力,ALINX 基于 AMD RFSoC FPGA 開發板 AXW22 正是為您準備的。 (AMD Zynq UltraScale RFSoC FPGA 射頻開發平臺 AXW22) 和所有 RFSoC 平臺一樣&#…

Spring @ModelAttribute注解全解析:數據綁定與模型管理

Spring 的 @ModelAttribute 注解主要用于數據綁定和模型屬性管理,支持方法級別和參數級別的應用,以下是其核心特性和使用場景: ?? 一、核心功能 數據綁定 將 HTTP 請求參數(如表單字段、查詢參數)自動綁定到 Java 對象。支持從請求參數、URI 路徑變量、請求頭等多來源獲…

[project-based-learning] 開源貢獻指南 | 自動化鏈接驗證 | Issue模板規范

第四章:貢獻指南 歡迎回來!在上一章《項目分類體系》中,我們探討了README.md文件如何通過編程語言和子類別組織教程,從而提升檢索效率。 現在已了解教程列表的構成(《教程列表》)、條目編寫規范&#xff…

OSCP備戰-LordOfTheRoot靶機復現步驟

PDF下載: Target-practice/Range at main szjr123/Target-practice 一、靶機描述 靶機地址:https://www.vulnhub.com/entry/lord-of-the-root-101,129/ 靶機難度:中等(CTF) 靶機描述:這是KoocSec為黑…

蘋果或140億美元收購Perplexity,AI搜索格局面臨重構

據多家媒體報道,蘋果內部高管近期就競購AI初創公司Perplexity的可能性舉行了初步會談。若交易最終達成,可能將以接近140億美元的估值完成,成為蘋果歷史上最大規模的收購案12。盡管討論仍處于早期階段,且蘋果尚未與Perplexity管理層…

屠龍刀策略

該策略是一個針對金融市場的自動化交易策略,主要用于日內交易,特別關注于在中國金融期貨市場(如滬深300指數期貨(IF))的日間交易時段(09:20至15:15)進行操作。下面是該策略核心部分的代碼注解解析: 參數定義 - `Nnn1(5)` 和 `Nnn2(20)`:策略中的兩個參數,用于內部計…

【本機已實現】使用Mac部署Triton服務,使用perf_analyzer、model_analyzer

我們的目標是星辰大海 硬件配置:Apple M224 GB Tirtion實現過程 1??Docker安裝 Tirtion的實現,首先要確保系統上的Docker可用 使用默認源會導致拉取失敗,因為墻 Error response from daemon: Get "https://registry-1.docker.io/v2…

idea依賴下載慢解決

setttings.xml <mirrors><mirror><id>aliyunmaven</id><name>阿里云公共倉庫</name><url>https://maven.aliyun.com/repository/public</url><mirrorOf>*</mirrorOf> <!-- 匹配所有倉庫請求 --></mirr…

C# WPF常用調試工具匯總

除了Live Visual Tree、Live Property Explorer和Snoop外&#xff0c;WPF開發還有多種強大的調試工具。以下是完整的工具集合及其詳細使用方法&#xff1a; 1. WPF Performance Suite (WPF性能分析套件) 簡介 微軟官方提供的專業WPF性能分析工具&#xff0c;包含多個組件用于診…

《Vuejs設計與實現》第 11 章(快速 diff 算法

目錄 11.1 相同的前置元素和后置元素 11.2 判斷是否需要進行 DOM 移動操作 11.3 如何移動元素 11.4 總結 我們將探討第三種用于比較新舊子節點集合的方法&#xff1a;快速Diff算法。 這種算法的速度非常快&#xff0c;最早應用于 ivi 和 inferno 框架&#xff0c;DOM 操作方…

JavaScript 存儲對象 sessionStorage (會話存儲) 和 localStorage(本地存儲)

深入理解 localStorage localStorage 是瀏覽器提供的一種客戶端存儲機制&#xff0c;用于在用戶瀏覽器中存儲鍵值對數據。與 cookie 相比&#xff0c;它提供了更大的存儲容量&#xff08;通常為 5-10MB&#xff09;&#xff0c;并且不會隨 HTTP 請求發送到服務器&#xff0c;因…

Z-Ant開源程序是簡化了微處理器上神經網絡的部署和優化

?一、軟件介紹 文末提供程序和源碼下載 Z-Ant &#xff08;Zig-Ant&#xff09; 是一個全面的開源神經網絡框架&#xff0c;專門用于在微控制器和邊緣設備上部署優化的 AI 模型。Z-Ant 使用 Zig 構建&#xff0c;為資源受限的硬件上的模型優化、代碼生成和實時推理提供端到端…

Linux系統---Nginx配置nginx狀態統計

配置Nignx狀態統計 1、下載vts模塊 https://github.com/vozlt/nginx-module-vts [rootclient ~]# nginx -s stop [rootclient ~]# ls anaconda-ks.cfg nginx-1.27.3 ceph-release-1-1.el7.noarch.rpm nginx-1.27.3.tar.gz info.sh …

深入理解 C++ Lambda表達式:四大語法特性 + 六大高頻考點全解析

Lambda表達式是C11引入的一項重要特性&#xff0c;它極大地改變了我們編寫匿名函數的方式。 一、為什么會有Lambda表達式 在C11之前&#xff0c;當我們需要傳遞一個簡單的函數時&#xff0c;通常有以下幾種選擇&#xff1a; 1.1、定義一個單獨的函數 // 單獨定義的比較函數…

SpringBoot 自動化部署實戰:CI/CD 整合方案與避坑全指南

在數字化轉型浪潮席卷全球的當下&#xff0c;企業對軟件交付的速度與質量提出了前所未有的高要求。SpringBoot 憑借其 “約定優于配置” 的特性&#xff0c;成為 Java 領域快速構建應用的熱門框架。而將 SpringBoot 與 CI/CD&#xff08;持續集成 / 持續交付&#xff09;相結合…

JVM字節碼文件結構深度剖析

反匯編&#xff0c;以下命令可以查看相對可讀的詳細結構 javap -verbose ByteCode.class與Class二進制文件并不是直接對齊的 Class二進制文件結構參照表 ClassFile {u4 magic;魔數u2 minor_version;副版本號u2 major_version;主版本號u2…

跟著chrome面板優化頁面性能

沒有優化前&#xff1a; 1.對文本進行壓縮&#xff1a; 重新打包 運行 評分好像還是沒有發生改變&#xff0c;于是我去找別的壓縮的途徑&#xff0c; npm install --save-dev vite-plugin-compression 然后修改vite.config.js文件 導入compression插件 文件夾中也成功出現了…

網上花店微信小程序完整項目

概述 一款功能完善的網上花店微信小程序完整項目。該項目包含了完整的前后端代碼&#xff0c;是一款基于Java技術棧開發的電商類小程序&#xff0c;適合初學者學習的小程序源碼。 主要內容 該花店小程序源碼采用主流技術架構開發&#xff0c;主要功能模塊包括&#xff1a; …