欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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

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

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

這個自定義ref就很有用

示例-延遲顯示

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

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

<template>
    <input type="text" v-model="keyword" />
    <h3>{{keyword}}</h3>
</template>
<script setup>
import { customRef } from 'vue';      
// 自定義的一個ref,名為myRef,自定義ref就是一個函數(shù)
function myRef(value) {
  // 自定義,自己得寫邏輯,customRef必須要傳入一個函數(shù),而且函數(shù)里面必須要返回一個對象
  return  customRef((track,trigger) => {  // 第一個return 是把自定義的內(nèi)容返回出去,第二個return 是返回里面的邏輯,返回get,和set
    return {  
        get() {  // 讀取數(shù)據(jù),這個value是初始化傳遞過來的數(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)接收兩個參數(shù),一個是track,另一個就是trigger,通知vue去重新解析模板
        }
    }
  });  
}    
let keyword = myRef("itclanCoder"); // 自己定義一個ref
</script>

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

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

解決持續(xù)回顯,誤觸發(fā)的問題,定時器一直開通的問題

<template>
    <input type="text" v-model="keyword" />
    <h3>{{keyword}}</h3>
</template>
<script setup>
import { customRef } from 'vue';      
// 自定義的一個ref,名為myRef,自定義ref就是一個函數(shù)
function myRef(value) {
  let timer;  // 開啟一個定時器  
  // 自定義,自己得寫邏輯,customRef必須要傳入一個函數(shù),而且函數(shù)里面必須要返回一個對象
  return  customRef((track,trigger) => {  // 第一個return 是把自定義的內(nèi)容返回出去,第二個return 是返回里面的邏輯,返回get,和set
    return {  
        get() {  // 讀取數(shù)據(jù),這個value是初始化傳遞過來的數(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);  // 先清除定時器,在開
           timer = setTimeout(() => {
              value = newValue;
              trigger(); // customRef函數(shù)內(nèi)接收兩個參數(shù),一個是track,另一個就是trigger,通知vue去重新解析模板
           },500)
        }
    }
  });  
}    
let keyword = myRef("itclanCoder"); // 自己定義一個ref
</script>

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

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

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

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

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

總結(jié)

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

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

相關(guān)文章

  • 一文帶你詳細(xì)了解Vue中的v-for

    一文帶你詳細(xì)了解Vue中的v-for

    v-for循環(huán)遍歷數(shù)據(jù),永遠(yuǎn)不要把v-if和v-for同時用在同一個元素上,下面這篇文章主要給大家介紹了關(guān)于如何通過一文帶你詳細(xì)了解Vue中v-for的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • vue集成高德地圖amap-jsapi-loader的實現(xiàn)

    vue集成高德地圖amap-jsapi-loader的實現(xiàn)

    本文主要介紹了vue集成高德地圖amap-jsapi-loader的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • vue-cli3.X快速創(chuàng)建項目的方法步驟

    vue-cli3.X快速創(chuàng)建項目的方法步驟

    這篇文章主要介紹了vue-cli3.X快速創(chuàng)建項目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 一文帶你深入理解Vue3響應(yīng)式原理

    一文帶你深入理解Vue3響應(yīng)式原理

    響應(yīng)式就是當(dāng)對象本身(對象的增刪值)或者對象屬性(重新賦值)發(fā)生變化時,將會運行一些函數(shù),最常見的就是render函數(shù),下面這篇文章主要給大家介紹了關(guān)于Vue3響應(yīng)式原理的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • vue 設(shè)置 input 為不可以編輯的實現(xiàn)方法

    vue 設(shè)置 input 為不可以編輯的實現(xiàn)方法

    今天小編就為大家分享一篇vue 設(shè)置 input 為不可以編輯的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • vue3.0中友好使用antdv示例詳解

    vue3.0中友好使用antdv示例詳解

    這篇文章主要給大家介紹了關(guān)于在vue3.0中如何友好使用antdv的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • vue編譯器util工具使用方法示例

    vue編譯器util工具使用方法示例

    這篇文章主要為大家介紹了vue編譯器util工具使用方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Vue分頁器組件使用方法詳解

    Vue分頁器組件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Vue分頁器組件的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • VUE兄弟組件傳值操作實例分析

    VUE兄弟組件傳值操作實例分析

    這篇文章主要介紹了VUE兄弟組件傳值操作,結(jié)合實例形式分析了VUE兄弟組件傳值操作的原理、步驟、實現(xiàn)方法及相關(guān)注意事項,需要的朋友可以參考下
    2019-10-10
  • 使用github部署前端vue項目

    使用github部署前端vue項目

    這篇文章主要為大家介紹了使用github部署前端vue項目過程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評論