實例講解Vue中customRef函數的使用方法
Vue中如何使用customRef函數?以下這篇文章就來帶大家了解VueJs中customRef函數的使用方法,希望對大家有幫助!
ref
是Vue
官方提供的componsition API
,將一個非響應式資料轉變為響應式資料的函數,至於底層怎麼實現資料的收集與響應式
使用者無需去關注,相當於就是精裝電腦,然而有時候,針對一些複雜特殊的需求,我們需要自己造輪子,自己手動原生的去實現內部結構。
實現基礎的功能的同時,還要進行額外的拓展,那麼這時候就需要自訂ref
了的,它就相當於是組裝式的電腦,內部結構需要自己去組裝、實現。
而非直接從商城裡購買,用一些現成的零件組裝一個類似精裝的電腦,甚至還可以進行拓展,在實現一個定制化複雜的功能需求時,這個自定義 ref
就很有用。 【相關推薦:vuejs影片教學、web前端開發】
#範例-延遲顯示
想要在input
中實現一個資料的即時收集與即時展示,需要使用v-model
指令
<template> <input type="text" v-model="keyword" /> <h3>{{keyword}}</h3> </template> <script setup> import { ref } from "vue"; let keyword = ref("itclanCoder"); // Vue官方提供的ref函数,返回一个响应式数据 </script>
現在不能用官方提供的ref
函數,也就是自己要自頂一個類似ref
函數,如下所示
<template> <input type="text" v-model="keyword" /> <h3>{{keyword}}</h3> </template> <script setup> import { customRef } from 'vue'; // 自定义的一个ref,名为myRef,自定义ref就是一个函数 function myRef(value) { // 自定义,自己得写逻辑,customRef必须要传入一个函数,而且函数里面必须要返回一个对象 return customRef((track,trigger) => { // 第一个return 是把自定义的内容返回出去,第二个return 是返回里面的逻辑,返回get,和set return { get() { // 读取数据,这个value是初始化传递过来的数据 console.log('get',`${value}`); track(); // 追踪一下数据的改变,通知vue最终value数据的变化,提前和get沟通一下,让value是有作用的 return value }, set(newValue) { // 设置数据,新的值,修改数据 value = newValue; trigger(); // customRef函数内接收两个参数,一个是track,另一个就是trigger,通知vue去重新解析模板 } } }); } let keyword = myRef("itclanCoder"); // 自己定义一个ref </script>
透過上面的方式就可實現自訂資料的收集和展示,如果想要等待幾秒後,觸發,那麼只需要在set
加上定時器就夠了的,其他不變
set(newValue) { setTimeout(() => { value = newValue; trigger(); // 通知vue去重新解析模板 },500) }
解決持續回顯,誤觸發的問題,定時器一直開通的問題
<template> <input type="text" v-model="keyword" /> <h3>{{keyword}}</h3> </template> <script setup> import { customRef } from 'vue'; // 自定义的一个ref,名为myRef,自定义ref就是一个函数 function myRef(value) { let timer; // 开启一个定时器 // 自定义,自己得写逻辑,customRef必须要传入一个函数,而且函数里面必须要返回一个对象 return customRef((track,trigger) => { // 第一个return 是把自定义的内容返回出去,第二个return 是返回里面的逻辑,返回get,和set return { get() { // 读取数据,这个value是初始化传递过来的数据 console.log('get',`${value}`); track(); // 追踪一下数据的改变,通知vue最终value数据的变化,提前和get沟通一下,让value是有作用的 return value }, set(newValue) { // 设置数据,新的值,修改数据 clearInterval(timer); // 先清除定时器,在开 timer = setTimeout(() => { value = newValue; trigger(); // customRef函数内接收两个参数,一个是track,另一个就是trigger,通知vue去重新解析模板 },500) } } }); } let keyword = myRef("itclanCoder"); // 自己定义一个ref </script>
#這個customRef
比較難以理解的是,它需要在自定義ref
函數中返回出去,同時,接收一個工廠函數作為參數,這個工廠函數接受track
和trigger
兩個函數
當參數,並傳回一個有get和set方法的物件
一般來說,track()
在get()
方法中的回傳值前進行呼叫,追蹤一下資料的改變,通知vue
最終資料的變化,而trigger()
函數則應該在set()
函數的最後呼叫
通知vue
去重新解析範本,更新頁面資料
最後就是實作等待多長時間,稍後顯示,使用定時器去實現,解決頻繁誤觸發的問題,常規的解決辦法,先清除定時器,然後在開啟定時器
總結
自訂ref(customRef())
函數是一個非常有用的東西,相當於是對ref
的一個功能的拓展,自己手動的去實現,內部實現比較繞,需要自己去體會與實踐的
以上是實例講解Vue中customRef函數的使用方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。

可以通過以下步驟為 Vue 按鈕添加函數:將 HTML 模板中的按鈕綁定到一個方法。在 Vue 實例中定義該方法並編寫函數邏輯。

Vue.js 中的 watch 選項允許開發者監聽特定數據的變化。當數據發生變化時,watch 會觸發一個回調函數,用於執行更新視圖或其他任務。其配置選項包括 immediate,用於指定是否立即執行回調,以及 deep,用於指定是否遞歸監聽對像或數組的更改。

Vue 多頁面開發是一種使用 Vue.js 框架構建應用程序的方法,其中應用程序被劃分為獨立的頁面:代碼維護性:將應用程序拆分為多個頁面可以使代碼更易於管理和維護。模塊化:每個頁面都可以作為獨立的模塊,便於重用和替換。路由簡單:頁面之間的導航可以通過簡單的路由配置來管理。 SEO 優化:每個頁面都有自己的 URL,這有助於搜索引擎優化。

在 Vue.js 中引用 JS 文件的方法有三種:直接使用 <script> 標籤指定路徑;利用 mounted() 生命週期鉤子動態導入;通過 Vuex 狀態管理庫進行導入。

Vue.js 返回上一頁有四種方法:$router.go(-1)$router.back()使用 <router-link to="/"> 組件window.history.back(),方法選擇取決於場景。

Vue.js 遍歷數組和對像有三種常見方法:v-for 指令用於遍歷每個元素並渲染模板;v-bind 指令可與 v-for 一起使用,為每個元素動態設置屬性值;.map 方法可將數組元素轉換為新數組。

Vue 中 div 元素跳轉的方法有兩種:使用 Vue Router,添加 router-link 組件。添加 @click 事件監聽器,調用 this.$router.push() 方法跳轉。
