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

Vue3組合式函數(shù)Composable實(shí)戰(zhàn)ref和unref使用

 更新時(shí)間:2023年06月28日 09:21:56   作者:前端榮耀  
這篇文章主要為大家介紹了Vue3組合式函數(shù)Composable實(shí)戰(zhàn)ref和unref使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

本文為翻譯文章,部分內(nèi)容難免理解有偏差,如有錯(cuò)誤歡迎大家指正。原文鏈接見(jiàn)文章末尾。

在使用Vue.js中的組合式時(shí),有時(shí)你已經(jīng)有了一個(gè)想要使用的ref,而有時(shí)你沒(méi)有。本文將介紹一種模式,讓你可以以?xún)煞N方式使用組合式,從而在編寫(xiě)應(yīng)用程序時(shí)提供更多的靈活性。

本篇是這個(gè)系列文章的第二篇,全部涵蓋內(nèi)容如下:

使用ref和unref來(lái)實(shí)現(xiàn)更靈活的參數(shù)傳遞

通常,組合式API需要某些類(lèi)型的參數(shù)作為輸入,通常會(huì)使用到響應(yīng)式變量參數(shù)。它也可以是原始的Javascript類(lèi)型,如字符串,數(shù)字或?qū)ο?。但是,為了使組合式更具靈活性和可重用性,我們會(huì)希望它可以接受任意類(lèi)型的參數(shù),并在運(yùn)行時(shí)將其轉(zhuǎn)換為所需的類(lèi)型。

// Works if we give it a ref we already have 
const countRef = ref(2); 
useCount(countRef); 
// Also works if we give it just a number 
const countRef = useCount(2);

我們上篇里面提到的useTitle也適用于這種模式。當(dāng)我們傳入一個(gè)ref的時(shí)候,頁(yè)面的標(biāo)題將會(huì)被設(shè)置成這個(gè)refvalue。

const title = ref('這里是標(biāo)題'); 
useTitle(title); 
title.value = '這是一個(gè)新標(biāo)題';

如果我們傳入一個(gè)字符串變量的話(huà),它將會(huì)創(chuàng)建一個(gè)新的ref和標(biāo)題進(jìn)行關(guān)聯(lián):

const title = useTitle('這里是標(biāo)題'); 
title.value = '這是一個(gè)新標(biāo)題';

上面的例子可能看起來(lái)區(qū)別不大,但是,在我們使用到一些方法或者組合式API的時(shí)候,我們可能會(huì)有不同的引用來(lái)源,從而這個(gè)組合式可以適應(yīng)不同的情況。

下面讓我們來(lái)看一下如何在我們的組合式中使用這種模式。

在組合式中實(shí)現(xiàn)靈活的參數(shù)

想實(shí)現(xiàn)靈活的參數(shù)模式,我們需要使用到refunref方法在參數(shù)上面。

// When we need to use a ref in the composable 
export default useMyComposable(input) { 
    const ref = ref(input); 
} 
// When we need to use a raw value in the composable 
export default useMyComposable(input) { 
    const rawValue = unref(input); 
}

如果是非響應(yīng)式的參數(shù)變量的話(huà),ref方法會(huì)創(chuàng)建一個(gè)新的ref變量給我們;如果是響應(yīng)式的話(huà),它會(huì)直接將對(duì)應(yīng)的變量返回給我們。

// Create a new ref 
const myRef = ref(0); 
// Get the same ref back 
assert(myRef === ref(myRef));

unref方法類(lèi)似,只不過(guò)它是將變量的真實(shí)值返回給我們

// Unwrap to get the inner value 
const value = unref(myRef); 
// Returns the same primitive value 
assert(value === unref(value));

下面讓我們看看在VueUse中使用這種模式的例子。

舉例-useTitle

讓我們繼續(xù)來(lái)看下我們已經(jīng)熟悉的useTitle方法。它允許我們傳入一個(gè)字符串或者是響應(yīng)式字符串變量:

// 傳入字符串變量
const titleRef = useTitle('Initial title'); 
// 傳入響應(yīng)式字符串變量 
const titleRef = ref('Initial title'); 
useTitle(titleRef);

在它的源碼中,我們可以看出,它通過(guò)ref方法來(lái)處理我們傳入的變量

// ... 
const title = ref(newTitle ?? document?.title ?? null) 
// ...

它使用到了JavaScript中的nullish coalescing(空值合并)運(yùn)算符,其語(yǔ)法為“??”,意思是“如果左側(cè)的值為nullundefined,則使用右側(cè)的值”。在代碼中,如果newTitle未定義,則使用document.title,如果document.title也未定義,則使用null。這個(gè)運(yùn)算符可以用于簡(jiǎn)化代碼中的條件判斷。

另外,useTitle的類(lèi)型定義中還使用到了TypeScript 中的 MaybeRef 類(lèi)型,它可以是 string 類(lèi)型或 Ref<string> 類(lèi)型。其中 Ref<T> 是一個(gè)帶有 T 類(lèi)型值的 ref。

type MaybeRef<T> = T | Ref<T>

舉例-useCssVar

useCssVar允許我們獲取到CSS變量的值并在應(yīng)用程序中使用它。和useTitle不同的是,我們需要傳入一個(gè)string類(lèi)型的值,來(lái)查詢(xún)對(duì)應(yīng)DOM上面的CSS變量。通過(guò)unref方法,來(lái)處理傳入的變量 - string類(lèi)型或者是一個(gè)ref

// Using a string 
const backgroundColor = useCssVar('--background-color'); 
// Using a ref 
const cssVarRef = ref('--background-color'); 
const backgroundColor = useCssVar(cssVarRef);

通過(guò)查看它的源碼,我們可以看出它使用了unRef方法來(lái)處理傳入的參數(shù)。而且,它還使用了一個(gè)輔助函數(shù)unrefElement,用于確保獲取的是 DOM 元素而不是 Vue 實(shí)例。

VueUse中很多組合式方法都使用了這個(gè)模式,如果你想深入研究的話(huà),選擇一個(gè)感興趣的去看它的源碼吧。

小結(jié)

本篇我們主要介紹了Vue.js中的可組合函數(shù)(composables)的第二個(gè)模式。該模式使用refunref函數(shù)來(lái)更靈活地使用參數(shù),使可組合函數(shù)能夠適應(yīng)不同的使用情況。

還介紹了VueUse庫(kù)如何實(shí)現(xiàn)這種模式,并舉例說(shuō)明了useTitle和useCssVar可組合函數(shù)如何使用ref和unref函數(shù)。

下一篇中,我們將會(huì)介紹另一種模式,該模式可以根據(jù)需要返回單個(gè)值或?qū)ο?,從而使可組合函數(shù)更易于使用。該模式可以使可組合函數(shù)更簡(jiǎn)單易用,尤其是在大多數(shù)情況下只需要單個(gè)值的情況下。

原文鏈接: # Coding Better Composables (2/5)

以上就是Vue3組合式函數(shù)Composable實(shí)戰(zhàn)ref和unref使用的詳細(xì)內(nèi)容,更多關(guān)于Vue3組合式函數(shù)ref unref的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 富文本編輯器vue2-editor實(shí)現(xiàn)全屏功能

    富文本編輯器vue2-editor實(shí)現(xiàn)全屏功能

    這篇文章主要介紹了富文本編輯器vue2-editor實(shí)現(xiàn)全屏功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-05-05
  • Vue的生命周期一起來(lái)看看

    Vue的生命周期一起來(lái)看看

    這篇文章主要為大家詳細(xì)介紹了Vue的生命周期,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • Vue突然報(bào)錯(cuò)doesn‘t?work?properly?without?JavaScript?enabled的解決方法

    Vue突然報(bào)錯(cuò)doesn‘t?work?properly?without?JavaScript?enabled

    最近在做項(xiàng)目的時(shí)候遇到了些問(wèn)題,所以這篇文章主要給大家介紹了關(guān)于Vue突然報(bào)錯(cuò)doesn‘t?work?properly?without?JavaScript?enabled的解決方法,需要的朋友可以參考下
    2023-01-01
  • Vue中webpack的使用詳解

    Vue中webpack的使用詳解

    這篇文章主要為大家詳細(xì)介紹了Vue中webpack的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • vue+Element-ui實(shí)現(xiàn)登錄注冊(cè)表單

    vue+Element-ui實(shí)現(xiàn)登錄注冊(cè)表單

    這篇文章主要為大家詳細(xì)介紹了vue+Element-ui實(shí)現(xiàn)登錄注冊(cè)表單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • vue-socket.io接收不到數(shù)據(jù)問(wèn)題的解決方法

    vue-socket.io接收不到數(shù)據(jù)問(wèn)題的解決方法

    這篇文章主要介紹了解決vue-socket.io接收不到數(shù)據(jù)問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • vue之el-upload使用FormData多文件同時(shí)上傳問(wèn)題

    vue之el-upload使用FormData多文件同時(shí)上傳問(wèn)題

    這篇文章主要介紹了vue之el-upload使用FormData多文件同時(shí)上傳問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • vue props數(shù)據(jù)傳遞類(lèi)型限制方式

    vue props數(shù)據(jù)傳遞類(lèi)型限制方式

    這篇文章主要介紹了vue props數(shù)據(jù)傳遞類(lèi)型限制方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue+xlsx實(shí)現(xiàn)表格的導(dǎo)入導(dǎo)出功能

    vue+xlsx實(shí)現(xiàn)表格的導(dǎo)入導(dǎo)出功能

    這篇文章主要介紹了vue+xlsx實(shí)現(xiàn)表格的導(dǎo)入導(dǎo)出功能,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • nuxt使用vuex存儲(chǔ)及獲取用戶(hù)信息踩坑的解決

    nuxt使用vuex存儲(chǔ)及獲取用戶(hù)信息踩坑的解決

    這篇文章主要介紹了nuxt使用vuex存儲(chǔ)及獲取用戶(hù)信息踩坑的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評(píng)論

河间市| 忻州市| 诸暨市| 乌苏市| 柳河县| 新民市| 靖安县| 封丘县| 广丰县| 洛阳市| 湖口县| 茂名市| 巨野县| 黑河市| 化隆| 道真| 台东市| 元谋县| 巴塘县| 新安县| 集安市| 特克斯县| 桑日县| 彭阳县| 兴仁县| 邹平县| 鄂托克旗| 通道| 广东省| 双城市| 琼海市| 建平县| 宁乡县| 陵川县| 郸城县| 芷江| 凤阳县| 体育| 上杭县| 柞水县| 遂川县|