最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文搞懂VueJs中customRef函數(shù)使用

 更新時(shí)間:2023年04月04日 10:47:19   作者:itclanCoder  
這篇文章主要為大家介紹了VueJs中customRef函數(shù)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

refVue官方提供的componsition API,將一個(gè)非響應(yīng)式數(shù)據(jù)轉(zhuǎn)變?yōu)轫憫?yīng)式數(shù)據(jù)的函數(shù),至于底層怎么實(shí)現(xiàn)數(shù)據(jù)的收集與響應(yīng)式

使用者無(wú)需去關(guān)注,相當(dāng)于就是精裝電腦,然而有時(shí)候,針對(duì)一些復(fù)雜特殊的需求,我們需要自己造輪子,自己手動(dòng)原生的去實(shí)現(xiàn)內(nèi)部結(jié)構(gòu)

實(shí)現(xiàn)基礎(chǔ)的功能的同時(shí),還要進(jìn)行額外的拓展,那么這時(shí)候就需要自定義ref了的,它就相當(dāng)于是組裝式的電腦,內(nèi)部結(jié)構(gòu)需要自己去組裝,實(shí)現(xiàn)

而非直接從商城里購(gòu)買,用一些現(xiàn)成的零部件組裝一個(gè)類似精裝的電腦,甚至還可以進(jìn)行拓展,在實(shí)現(xiàn)一個(gè)定制化復(fù)雜的功能需求時(shí)

這個(gè)自定義ref就很有用

示例-延遲顯示

想要在input中實(shí)現(xiàn)一個(gè)數(shù)據(jù)的實(shí)時(shí)收集與實(shí)時(shí)展示,需要使用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函數(shù),返回一個(gè)響應(yīng)式數(shù)據(jù)
</script>

現(xiàn)在不能用官方提供的ref函數(shù),也就是自己要自頂一個(gè)類似ref函數(shù),如下所示

<template>
    <input type="text" v-model="keyword" />
    <h3>{{keyword}}</h3>
</template>
<script setup>
import { customRef } from 'vue';      
// 自定義的一個(gè)ref,名為myRef,自定義ref就是一個(gè)函數(shù)
function myRef(value) {
  // 自定義,自己得寫邏輯,customRef必須要傳入一個(gè)函數(shù),而且函數(shù)里面必須要返回一個(gè)對(duì)象
  return  customRef((track,trigger) => {  // 第一個(gè)return 是把自定義的內(nèi)容返回出去,第二個(gè)return 是返回里面的邏輯,返回get,和set
    return {  
        get() {  // 讀取數(shù)據(jù),這個(gè)value是初始化傳遞過(guò)來(lái)的數(shù)據(jù)
            console.log('get',`${value}`);
            track(); // 追蹤一下數(shù)據(jù)的改變,通知vue最終value數(shù)據(jù)的變化,提前和get溝通一下,讓value是有作用的
            return value
        },
        set(newValue) { // 設(shè)置數(shù)據(jù),新的值,修改數(shù)據(jù)
           value = newValue;
           trigger(); // customRef函數(shù)內(nèi)接收兩個(gè)參數(shù),一個(gè)是track,另一個(gè)就是trigger,通知vue去重新解析模板
        }
    }
  });  
}    
let keyword = myRef("itclanCoder"); // 自己定義一個(gè)ref
</script>

通過(guò)上面的方式就可實(shí)現(xiàn)自定義數(shù)據(jù)的收集和展示,如果想要等待幾秒后,觸發(fā),那么只需要在set加一個(gè)定時(shí)器就夠了的,其他不變

set(newValue) {
    setTimeout(() => {
        value = newValue;
        trigger(); // 通知vue去重新解析模板
    },500)
}

解決持續(xù)回顯,誤觸發(fā)的問(wèn)題,定時(shí)器一直開(kāi)通的問(wèn)題

<template>
    <input type="text" v-model="keyword" />
    <h3>{{keyword}}</h3>
</template>
<script setup>
import { customRef } from 'vue';      
// 自定義的一個(gè)ref,名為myRef,自定義ref就是一個(gè)函數(shù)
function myRef(value) {
  let timer;  // 開(kāi)啟一個(gè)定時(shí)器  
  // 自定義,自己得寫邏輯,customRef必須要傳入一個(gè)函數(shù),而且函數(shù)里面必須要返回一個(gè)對(duì)象
  return  customRef((track,trigger) => {  // 第一個(gè)return 是把自定義的內(nèi)容返回出去,第二個(gè)return 是返回里面的邏輯,返回get,和set
    return {  
        get() {  // 讀取數(shù)據(jù),這個(gè)value是初始化傳遞過(guò)來(lái)的數(shù)據(jù)
            console.log('get',`${value}`);
            track(); // 追蹤一下數(shù)據(jù)的改變,通知vue最終value數(shù)據(jù)的變化,提前和get溝通一下,讓value是有作用的
            return value
        },
        set(newValue) { // 設(shè)置數(shù)據(jù),新的值,修改數(shù)據(jù)
           clearInterval(timer);  // 先清除定時(shí)器,在開(kāi)
           timer = setTimeout(() => {
              value = newValue;
              trigger(); // customRef函數(shù)內(nèi)接收兩個(gè)參數(shù),一個(gè)是track,另一個(gè)就是trigger,通知vue去重新解析模板
           },500)
        }
    }
  });  
}    
let keyword = myRef("itclanCoder"); // 自己定義一個(gè)ref
</script>

這個(gè)customRef比較難以理解的是,它需要在自定義ref函數(shù)中返回出去,同時(shí),接收一個(gè)工廠函數(shù)作為參數(shù),這個(gè)工廠函數(shù)接受tracktrigger兩個(gè)函數(shù)

作為參數(shù),并返回一個(gè)帶有g(shù)et和set方法的對(duì)象

一般來(lái)說(shuō),track()get()方法中的返回值前進(jìn)行調(diào)用,追蹤一下數(shù)據(jù)的改變,通知vue最終數(shù)據(jù)的變化,而trigger()函數(shù)則應(yīng)該在set()函數(shù)的末尾調(diào)用

通知vue去重新解析模板,更新頁(yè)面數(shù)據(jù)

最后就是實(shí)現(xiàn)等待多長(zhǎng)時(shí)間,稍后顯示,使用一個(gè)定時(shí)器去實(shí)現(xiàn),解決頻繁誤觸發(fā)的問(wèn)題,常規(guī)的解決辦法,先清除定時(shí)器,然后在開(kāi)啟定時(shí)器

總結(jié)

自定義ref(customRef())函數(shù)是一個(gè)非常有用的東西,相當(dāng)于是對(duì)ref的一個(gè)功能的拓展,自己手動(dòng)的去實(shí)現(xiàn),內(nèi)部實(shí)現(xiàn)比較繞,需要自己去體會(huì)和實(shí)踐的

以上就是一文搞懂VueJs中customRef函數(shù)使用的詳細(xì)內(nèi)容,更多關(guān)于VueJs customRef函數(shù)使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue實(shí)現(xiàn)幾秒后跳轉(zhuǎn)新頁(yè)面代碼

    vue實(shí)現(xiàn)幾秒后跳轉(zhuǎn)新頁(yè)面代碼

    這篇文章主要介紹了vue實(shí)現(xiàn)幾秒后跳轉(zhuǎn)新頁(yè)面代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • vue computed無(wú)法得到this的屬性或方法的解決

    vue computed無(wú)法得到this的屬性或方法的解決

    這篇文章主要介紹了vue computed無(wú)法得到this的屬性或方法的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • vue webpack build資源相對(duì)路徑的問(wèn)題及解決方法

    vue webpack build資源相對(duì)路徑的問(wèn)題及解決方法

    這篇文章主要介紹了vue webpack build資源相對(duì)路徑的問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • vue?axios?form-data格式傳輸數(shù)據(jù)和文件方式

    vue?axios?form-data格式傳輸數(shù)據(jù)和文件方式

    這篇文章主要介紹了vue?axios?form-data格式傳輸數(shù)據(jù)和文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • vue給對(duì)象動(dòng)態(tài)添加屬性和值的實(shí)例

    vue給對(duì)象動(dòng)態(tài)添加屬性和值的實(shí)例

    今天小編就為大家分享一篇vue給對(duì)象動(dòng)態(tài)添加屬性和值的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • vue中v-model對(duì)select的綁定操作

    vue中v-model對(duì)select的綁定操作

    這篇文章主要介紹了vue中v-model對(duì)select的綁定操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • vue實(shí)現(xiàn)2048小游戲功能思路詳解

    vue實(shí)現(xiàn)2048小游戲功能思路詳解

    這篇文章主要介紹了vue實(shí)現(xiàn)2048小游戲功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • Vue之TodoList案例詳解

    Vue之TodoList案例詳解

    這篇文章主要為大家介紹了Vue之TodoList的案例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助<BR>
    2021-11-11
  • Vue EventBus自定義組件事件傳遞

    Vue EventBus自定義組件事件傳遞

    這篇文章主要介紹了Vue EventBus自定義組件事件傳遞,組件化應(yīng)用構(gòu)建是Vue的特點(diǎn)之一,本文主要介紹EventBus進(jìn)行數(shù)據(jù)消息傳遞 ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Vue模擬數(shù)據(jù),實(shí)現(xiàn)路由進(jìn)入商品詳情頁(yè)面的示例

    Vue模擬數(shù)據(jù),實(shí)現(xiàn)路由進(jìn)入商品詳情頁(yè)面的示例

    今天小編就為大家分享一篇Vue模擬數(shù)據(jù),實(shí)現(xiàn)路由進(jìn)入商品詳情頁(yè)面的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08

最新評(píng)論

东兰县| 福建省| 沁源县| 得荣县| 泗阳县| 华蓥市| 五寨县| 白水县| 伊春市| 枣阳市| 上饶市| 盐城市| 温宿县| 壶关县| 高邑县| 忻州市| 南澳县| 会东县| 色达县| 呈贡县| 马尔康县| 云林县| 抚松县| 金山区| 东乡| 安图县| 福鼎市| 涟水县| 晴隆县| 富裕县| 昌平区| 鄢陵县| 白城市| 澄迈县| 宁安市| 平果县| 南汇区| 衡阳县| 南康市| 阜平县| 岑溪市|