Vue - customRef 自定義ref

customRef 作用:創建一個自定義的 ref , 并對其依賴項跟蹤和更新觸發進行邏輯控制。

在原生 ref 的基礎上,添加自己的邏輯等...

Vue 3 中,customRef?是一個用于創建自定義響應式引用的 API。它允許開發者控制和優化響應式引用的行為,適用于特定的需求,例如創建延遲更新、合并多個變更,或是使用非標準的 getter/setter 行為。

customRef?接收一個函數,該函數返回一個對象,這個對象包含?get?和?set?函數。在?get?函數中,可以定義如何返回當前值,而在?set?函數中定義如何更新值。

基本結構:

import { customRef } from 'vue';// 使用 customRef 創建自定義引用
const myRef = customRef((track, trigger) => {let value; // 自定義值return {get() {track(); // 追蹤依賴return value; // 返回當前值},set(newValue) {value = newValue; // 設置新值trigger(); // 觸發更新},};
});
  • track():用于追蹤訪問的地方。當調用?get()?時,此函數會注冊當前的依賴關系。
  • trigger():用于在調用?set()?時通知依賴于這個引用的地方要重新渲染或執行相應的操作。

實例:封裝成 Hooks

// Person.vue<template><div class="person"><h3>{{ msg }}</h3><input type="text" v-model="msg"></div></template><script setup lang='ts' >
// import { ref } from 'vue';
import useMsgRef from '../hooks/useMsgRef'// 使用 Vue 提供的默認 ref 定義響應式數據,數據一變,頁面就更新
// const msg = ref('你好')// 使用 Vue 提供的 customRef 定義響應式數據
// 補充需求,輸入一秒后,再顯示
// 使用 useMsgRef 來定義一個響應式數據且有延遲效果
let {msg}=useMsgRef('xxx',2000)
</script>
<style scoped></style>
// useMsgRef.tsimport { customRef } from "vue";export default function (initValue:String,delay:number) {
// 使用 Vue 提供的 customRef 定義響應式數據
// 初始值
let timer:number
// track(跟蹤),trigger(觸發)
const msg = customRef((track,trigger) => {return {// get(): msg 被讀取時被調用get() {// track() 告訴 Vue 數據 msg 很重要,你要對 msg 進行持續關注// 那么,一旦 msg 變化就去更新track() // console.log('get');return initValue},// set(): msg 被修改時被調用set(value) {// 補充需求,輸入一秒后,再顯示clearTimeout(timer)timer = setTimeout(() => {console.log('set',value);initValue = value;// trigger() 通知 Vue 數據 msg 變化了trigger()},delay)}}
})return {msg}
}

重點理解:track( ) 和 trigger( )

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

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

相關文章

數字化轉型:概念性名詞淺談(第四講)

?大家好&#xff0c;本篇文章是在新年之際寫的&#xff0c;所以在這里先給大家拜個年。 今天要介紹的名詞為ETL: ETL&#xff0c;是英文Extract-Transform-Load的縮寫&#xff0c;用來描述將數據從來源端經過抽取&#xff08;extract&#xff09;、轉換&#xff08;transfor…

UE學習日志#22 C++筆記#8 基礎復習8 string和string_view2

1 std::string_view類 string_view基本上就是const string&的簡單替代品&#xff0c;但不會產生開銷。他不復制字符串。 string_view添加了remove_prefix(size_t)和remove_suffix(size_t)方法&#xff0c;前者將起始指針給定的偏移量來收縮字符串&#xff0c;后者則將結尾指…

UVM factory機制

目錄 1. factory-register 1.1 uvm_object_registry#(type T=uvm_object, string Tname="") 1.1 uvm_default_factory::register 2. factory-override 2.1 set_type_override(uvm_object_wrapper override_type) 2.2 set_inst_override(uvm_object_wrapper ove…

Spring MVC學習——發送請求(@RequestMapping注解及請求參數綁定)

前言 Spring MVC作為Spring框架中的核心組件之一&#xff0c;其強大的功能在于能簡潔高效地處理HTTP請求和響應。在開發Web應用時&#xff0c;理解和正確使用Spring MVC的注解&#xff0c;尤其是RequestMapping注解&#xff0c;至關重要。本文將詳細講解RequestMapping注解的使…

C# Action和 Func的用法

C#中的數據類型 函數數據類型 Action 是一個數據類型 但是是沒有返回值得函數數據類型 Func 用于指定一個有返回值的委托 internal class Program{static void Main(string[] args){TT.F1(NoVoid);TT.F2(Void1);Void2(() > { Console.WriteLine("Void2執行了");…

C++中的模板(上)

C中的模板(上) 模板參數和函數參數是很像的,函數參數定義的形參對象,而模板參數定義的是類型. 模板分為函數模板和類模板 函數模板 一個交換兩個數的函數模板: template<class T> // 此處typename和class是等價的 void Swap(T &a, T &b) {T temp a;a b;b …

MySQL面試題----如何進行 MySQL 數據庫備份與恢復

MySQL 數據庫備份 1. 使用 mysqldump 工具(邏輯備份) 全量數據庫備份 該方式會備份指定數據庫中的所有數據和表結構。在命令行中輸入以下命令,將 username 替換為你的 MySQL 用戶名,password 替換為對應的密碼,database_name 替換為要備份的數據庫名,backup.sql 為備份文…

Java集合面試總結(題目來源JavaGuide)

問題1&#xff1a;說說 List,Set,Map 三者的區別&#xff1f; 在 Java 中&#xff0c;List、Set 和 Map 是最常用的集合框架&#xff08;Collection Framework&#xff09;接口&#xff0c;它們的主要區別如下&#xff1a; 1. List&#xff08;列表&#xff09; 特點&#xf…

deepseek接入pycharm 進行AI編程

要將DeepSeek接入PyCharm進行AI編程,可以按照以下步驟操作: ### 1. 獲取DeepSeek API訪問權限 DeepSeek通常以API的形式對外提供服務,你需要在其官方網站注冊賬號,申請API訪問權限。在申請通過后,會獲得API密鑰(API Key),這是后續調用API的關鍵憑證。 ### 2. 安裝必要…

奧迪改名風波再起,A6L能否率隊創下新奇跡

文/王俁祺 導語&#xff1a;春節假期剛過&#xff0c;奧迪的車型命名規則又變了。在如今以內卷為主基調的環境下&#xff0c;車型改名可不是小事&#xff0c;而奧迪的這次調整背后藏著許多深意&#xff0c;也預示著2025年奧迪在產品布局上的新動向。 改名能否“改命” 回溯到…

【怎么用系列】短視頻戒除-1-對推薦算法進行干擾

如今推薦算法已經滲透到人們生活的方方面面&#xff0c;尤其是抖音等短視頻核心就是推薦算法。 【短視頻的危害】 1> 會讓人變笨&#xff0c;慢慢讓人喪失注意力與專注力 2> 讓人喪失閱讀長文的能力 3> 讓人沉浸在一個又一個快感與嗨點當中。當我們刷短視頻時&#x…

改進Transformer,解讀Tokenformer論文:基于參數分詞化重新思考Transformer的擴展策略

Transformer 訓練成本高昂的問題日益凸顯&#xff0c;不僅需要耗費巨額的資金與大量的計算資源&#xff0c;還對環境產生了不可忽視的影響&#xff0c;最近由北京大學與谷歌聯合發表的一篇論文&#xff0c;為這一棘手難題帶來了全新的曙光。論文中提出的創新方案&#xff0c;有…

【STM32】HAL庫USB虛擬U盤MSC配置及采用自帶的Flash作為文件系統

【STM32】HAL庫USB虛擬U盤MSC實現配置及采用自帶的Flash作為文件系統 本文將自帶的Flash作為文件系統 通過配置USB的MSC功能實現虛擬U盤 沒有單獨建立FATFS文件系統 僅僅是配置USB和Flash讀寫而已 當然 這里也可以用外部Flash等等 也可以配置文件系統來進行套殼 但總體而言不如…

Noise Conditional Score Network

NCSN p σ ( x ~ ∣ x ) : N ( x ~ ; x , σ 2 I ) p_\sigma(\tilde{\mathrm{x}}|\mathrm{x}) : \mathcal{N}(\tilde{\mathrm{x}}; \mathrm{x}, \sigma^2\mathbf{I}) pσ?(x~∣x):N(x~;x,σ2I) p σ ( x ~ ) : ∫ p d a t a ( x ) p σ ( x ~ ∣ x ) d x p_\sigma(\mathrm…

jdk8 G1收集器怎么手動調優

在 JDK 8 中&#xff0c;手動調優 G1 垃圾收集器可以通過以下步驟和參數進行&#xff1a; 1. 啟用 G1 垃圾收集器 要啟用 G1 垃圾收集器&#xff0c;需要在 JVM 啟動參數中添加以下選項&#xff1a; -XX:UseG1GC 這個參數告訴 JVM 使用 G1 作為垃圾收集器。 2. 設置堆內存…

Nginx通過設置自定義標記識別代理調用

Nginx通過設置自定義標記識別代理調用 業務場景 最近遇到一個業務場景&#xff0c;部署在云端服務器的一個平臺&#xff0c;接口提供給多個現場調用&#xff0c;其中一個現場是通過nginx代理服務器代理轉發到云服務器&#xff0c;另外一個現場則是直接通過云服務器接口進行調…

前端知識速記:POST和GET

前端知識速記&#xff1a;POST和GET請求的區別 一、GET請求概述 GET請求是一種用于獲取服務器資源的請求方式。**使用GET請求時&#xff0c;數據通過URL傳遞&#xff0c;適合用于獲取數據而不修改資源。**以下是GET請求的一些基本特征&#xff1a; 數據附在URL后面&#xff…

axios如何利用promise無痛刷新token

目錄 需求 需求解析 實現思路 方法一&#xff1a; 方法二&#xff1a; 兩種方法對比 實現 封裝axios基本骨架 instance.interceptors.response.use攔截實現 問題和優化 如何防止多次刷新token 同時發起兩個或以上的請求時&#xff0c;其他接口如何重試 最后完整代…

【DeepSeek系列】01 DeepSeek-V1 快速入門

1、DeepSeek簡介 2024年底&#xff0c;DeepSeek 相繼推出了其第一代推理大模型&#xff1a;DeepSeek-R1-Zero 和 DeepSeek-R1。 DeepSeek-R1-Zero 是一個通過大規模強化學習&#xff08;RL&#xff09;訓練的模型&#xff0c;訓練過程中沒有使用監督微調&#xff08;SFT&…

基于LabVIEW的Modbus-RTU設備通信失敗問題分析與解決

在使用 LabVIEW 通過 Modbus-RTU 協議與工業設備進行通信時&#xff0c;可能遇到無法正常發送或接收指令的問題。常見原因包括協議參數配置錯誤、硬件連接問題、數據幀格式不正確等。本文以某 RGBW 控制器調光失敗為例&#xff0c;提出了一種通用的排查思路&#xff0c;幫助開發…