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

Vue3中的組合式?API示例詳解

 更新時間:2022年06月15日 16:08:24   作者:源字節(jié)1號  
組合式 API 是一系列 API 的集合,使我們可以使用函數(shù)而不是聲明選項(xiàng)的方式書寫 Vue 組件,這篇文章主要介紹了什么是Vue3的組合式?API,需要的朋友可以參考下

組合式 API 是一系列 API 的集合,使我們可以使用函數(shù)而不是聲明選項(xiàng)的方式書寫 Vue 組件。它是一個概括性的術(shù)語,涵蓋了以下方面的 API:

  • 響應(yīng)性 API:例如ref()reactive(),使我們可以直接創(chuàng)建響應(yīng)式狀態(tài)、計算屬性和偵聽器。
  • 生命周期鉤子:例如onMounted()onUnmounted(),使我們可以在組件各個生命周期階段添加邏輯。
  • 依賴注入:例如provide()inject(),使我們可以在使用響應(yīng)性 API 時,利用 Vue 的依賴注入系統(tǒng)。

在 Vue 3 中,組合式 API 基本上都會配合<script setup>語法在單文件組件中使用。下面是一個使用組合式 API 的組件示例:

<script setup>
import { ref, onMounted } from 'vue'
// 響應(yīng)式狀態(tài)
const count = ref(0)

// 更改狀態(tài)、觸發(fā)更新的函數(shù)
function increment() {
  count.value++
}
// 生命周期鉤子
onMounted(() => {
  console.log(`計數(shù)器初始值為 ${count.value}。`)
})
</script>

<template>
  <button @click="increment">點(diǎn)擊了:{{ count }} 次</button>
</template>

雖然這套 API 的風(fēng)格是基于函數(shù)的組合,但組合式 API 并不是函數(shù)式編程。組合式 API 是以 Vue 中數(shù)據(jù)可變的、細(xì)粒度的響應(yīng)性系統(tǒng)為基礎(chǔ)的,而函數(shù)式編程更強(qiáng)調(diào)數(shù)據(jù)不可變。

為什么要有組合式 API?

更好的邏輯復(fù)用

組合式 API 最基本的優(yōu)勢是它使我們能夠通過組合函數(shù)來實(shí)現(xiàn)更加簡潔高效的邏輯復(fù)用。它解決了所有mixins的缺陷,那是選項(xiàng)式 API 中一種邏輯復(fù)用機(jī)制。

更靈活的代碼組織

許多用戶都喜歡選項(xiàng)式 API,因?yàn)樵谀J(rèn)情況下就能夠?qū)懗鲇薪M織的代碼:任何東西都有其對應(yīng)的選項(xiàng)來管理。然而,選項(xiàng)式 API 在單個組件的邏輯復(fù)雜到一定程度時,也面臨了一些無法忽視的限制。這些限制主要體現(xiàn)在需要處理多個邏輯關(guān)注點(diǎn)的組件中,在許多 Vue 2 已經(jīng)上線的生產(chǎn)應(yīng)用中可以看到這一點(diǎn)。

我們以 Vue CLI GUI 中的文件瀏覽器組件為例:這個組件承擔(dān)了以下幾個邏輯關(guān)注點(diǎn):

  • 追蹤當(dāng)前文件夾的狀態(tài),展示其內(nèi)容
  • 處理文件夾的相關(guān)操作(打開、關(guān)閉和刷新)
  • 支持創(chuàng)建新文件夾
  • 可以切換到只展示收藏的文件夾
  • 可以開啟對隱藏文件夾的展示
  • 處理當(dāng)前工作目錄中的變更

這個組件最原始的版本是由選項(xiàng)式 API 寫成的。而如果用組合式 API 重構(gòu)這個組件,將會變成:

現(xiàn)在與同一個邏輯關(guān)注點(diǎn)相關(guān)的代碼被歸為了一組:我們無需再為了一個邏輯關(guān)注點(diǎn)在不同的選項(xiàng)塊間來回滾動切換。此外,我們現(xiàn)在可以不費(fèi)吹灰之力地將這一組代碼移動到一個外部文件中,不再需要為了抽象而重新組織代碼,大大降低了重構(gòu)成本,這在長期維護(hù)的大型項(xiàng)目中非常關(guān)鍵。

更好的類型推導(dǎo)

近幾年來,越來越多的開發(fā)者開始使用TypeScript書寫更健壯可靠的代碼,TypeScript還提供了非常好的IDE 開發(fā)支持。然而選項(xiàng)式 API 是在 2013

年創(chuàng)建的,那時并沒有想到需要進(jìn)行類型推導(dǎo)。因此我們做了一些荒謬復(fù)雜的類型體操來實(shí)現(xiàn)對選項(xiàng)式 API 的類型推導(dǎo)。但盡管做了這么多的努力,選項(xiàng)式 API 的類型推導(dǎo)仍然無法適配混入和依賴注入。

因此,很多想要搭配 TS 使用 Vue 的開發(fā)者采用了由vue-class-component提供的Class API。然而,基于 Class 的 API 非常依賴 ES 裝飾器,在 Vue 2019 年開發(fā)完成后,它仍是一個僅處于 vue 2的語言功能。我們認(rèn)為將這樣一種不穩(wěn)定的方案作為官方 API 的一種實(shí)現(xiàn)形式風(fēng)險過高,在那之后裝飾器提案還進(jìn)行了一些較大的變動,在書寫這篇文檔時仍未到達(dá) vue 3。另外,基于 Class 的 API 和選項(xiàng)式 API 在邏輯復(fù)用和代碼組織方面有相同的限制。

相比之下,組合式 API 主要利用基本的變量和函數(shù),它們本身就是類型友好的。用組合式 API 重寫的代碼可以享受到完整的類型推導(dǎo),不需要書寫太多類型標(biāo)注。大多數(shù)時候,用 TypeScript 書寫的組合式 API 代碼和用 JavaScript 寫都差不太多!這也同樣讓許多純 JavaScript 用戶能從IDE 中享受到部分類型推導(dǎo)功能。

生產(chǎn)包體積更小

搭配<script setup>使用組合式 API 比等價情況下的選項(xiàng)式 API 更高效,對代碼壓縮也更友好。這是由于<script setup>;形式書寫的組件模板被編譯為了一個內(nèi)連函數(shù),和<script setup>中的代碼位于同一作用域。不像選項(xiàng)式 API 需要依賴this上下文對象訪問屬性,被編譯的模板可以直接訪問<script setup>中定義的變量,無需一個代碼實(shí)例從中代理。這對代碼壓縮更友好,因?yàn)樽兞康拿挚梢宰兊酶蹋珜ο蟮膶傩悦麆t不能。

與選項(xiàng)式 API 的關(guān)系

組合式 API 是否覆蓋了所有場景?

對于有狀態(tài)的邏輯來說,的確如此。當(dāng)使用組合式 API 時,只需要用到一小部分選項(xiàng):props,emitsnameinheritAttrs。如果使用<script setup>,那么inheritAttrs應(yīng)該是唯一一個需要用額外的<script>塊書寫的選項(xiàng)了。

如果你在代碼中只使用了組合式 API(以及上述必需的選項(xiàng)),得益于編譯時標(biāo)記你可以減小生產(chǎn)包大概幾 kb 左右的體積,因?yàn)閬G掉了 Vue 之中關(guān)于選項(xiàng)式 API 的所有代碼。注意這也會影響你依賴中的 Vue 組件。

可以同時使用兩種 API 嗎?

可以。你可以在一個選項(xiàng)式 API 組件中使用setup()選項(xiàng)。

然而,我們只推薦你在就舊項(xiàng)目中這樣使用。它們長期基于選項(xiàng)式 API 開發(fā)、又可能想要集成新的功能,或是想要集成基于組合式 API 的第三方庫。

選項(xiàng)式 API 會被廢棄嗎?

不會,我們沒有任何計劃這樣做。選項(xiàng)式 API 也是 Vue 不可分割的一部分,也有很多開發(fā)者喜歡它。我們也意識到組合式 API 主要適用于非常大型的項(xiàng)目,而對于中小型項(xiàng)目來說選項(xiàng)式 API 仍然是一個不錯的選擇。

到此這篇關(guān)于什么是Vue3的組合式 API的文章就介紹到這了,更多相關(guān)Vue3組合式 API內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue3項(xiàng)目中的hooks的使用教程

    Vue3項(xiàng)目中的hooks的使用教程

    今天我們稍微說一下 vue3 項(xiàng)目中的 hooks 的使用,其實(shí)這個 hooks 呢是和 vue2 當(dāng)中的 mixin 是類似的,學(xué)習(xí)過 vue2 的小伙伴一定對 mixin 一定比較熟悉,快跟隨小編一起來學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Vue3根據(jù)動態(tài)字段綁定v-model的操作代碼

    Vue3根據(jù)動態(tài)字段綁定v-model的操作代碼

    最近在學(xué)習(xí)vue技術(shù),開發(fā)表格的時候,想把表格做成組件,那查詢條件就需要動態(tài)生成,這就遇到一個問題,vue怎么動態(tài)給v-model變量值,本文通過實(shí)例代碼給大家介紹,對Vue3動態(tài)綁定v-model實(shí)例代碼感興趣的朋友一起看看吧
    2022-10-10
  • vue3實(shí)現(xiàn)手機(jī)上可拖拽元素的組件

    vue3實(shí)現(xiàn)手機(jī)上可拖拽元素的組件

    這篇文章主要介紹了vue3實(shí)現(xiàn)手機(jī)上可拖拽元素的組件,用vue3實(shí)現(xiàn)一個可在手機(jī)上拖拽元素的組件,可拖拽至任意位置,并且可以防止拖拽元素移出屏幕邊緣
    2022-09-09
  • vue如何實(shí)現(xiàn)級聯(lián)選擇器功能

    vue如何實(shí)現(xiàn)級聯(lián)選擇器功能

    這篇文章主要介紹了vue如何實(shí)現(xiàn)級聯(lián)選擇器功能問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • vue+intro.js插件實(shí)現(xiàn)引導(dǎo)功能

    vue+intro.js插件實(shí)現(xiàn)引導(dǎo)功能

    使用 intro.js這個插件,來實(shí)現(xiàn)一個引導(dǎo)性的效果,經(jīng)常在一些新手引導(dǎo)頁遇到這樣的需求,下面通過本文給大家分享vue+intro.js插件實(shí)現(xiàn)引導(dǎo)功能,感興趣的朋友一起看看吧
    2024-06-06
  • Vue自動構(gòu)建發(fā)布腳本的方法示例

    Vue自動構(gòu)建發(fā)布腳本的方法示例

    這篇文章主要介紹了Vue自動構(gòu)建發(fā)布腳本的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Vue El-descriptions 描述列表功能實(shí)現(xiàn)

    Vue El-descriptions 描述列表功能實(shí)現(xiàn)

    這篇文章主要介紹了Vue El-descriptions 描述列表功能實(shí)現(xiàn),Descriptions 描述列表,列表形式展示多個字段,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • 一文帶你了解什么是Vue?Vapor

    一文帶你了解什么是Vue?Vapor

    隨著Svelte和SolidJS的流行,無虛擬DOM模式逐漸開始火了起來,Vue?Vapor就是一個無虛擬DOM模式版本的vue,下面就跟隨小編一起來深入了解一下Vue?Vapor吧
    2024-11-11
  • vue指令實(shí)現(xiàn)數(shù)字和大寫中文實(shí)時互轉(zhuǎn)

    vue指令實(shí)現(xiàn)數(shù)字和大寫中文實(shí)時互轉(zhuǎn)

    這篇文章主要介紹了如何使用Vue指令實(shí)現(xiàn)在用戶輸入數(shù)字失焦后實(shí)時將數(shù)字轉(zhuǎn)為大寫中文,聚焦的時候?qū)⒋髮懼形霓D(zhuǎn)為數(shù)字以便用戶繼續(xù)修改,需要的可以參考下
    2024-12-12
  • vue中組件的name屬性含義和用法示例

    vue中組件的name屬性含義和用法示例

    組件是有name屬性的,匹配的就是組件的name,下面這篇文章主要給大家介紹了關(guān)于vue中組件的name屬性含義和用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12

最新評論

宜州市| 项城市| 滦平县| 沙河市| 阿荣旗| 许昌市| 赣州市| 密山市| 观塘区| 苍溪县| 衡阳市| 班玛县| 昆明市| 临朐县| 军事| 马山县| 彰化县| 上栗县| 城步| 道孚县| 稷山县| 新泰市| 个旧市| 莱阳市| 舞钢市| 汝南县| 个旧市| 琼结县| 台湾省| 克拉玛依市| 上思县| 招远市| 临猗县| 历史| 甘德县| 垫江县| 临邑县| 鲁甸县| 儋州市| 东莞市| 长沙县|