真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Vue3的組合式API實(shí)例應(yīng)用分析

這篇文章主要介紹“Vue3的組合式API實(shí)例應(yīng)用分析”的相關(guān)知識,小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“Vue3的組合式API實(shí)例應(yīng)用分析”文章能幫助大家解決問題。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),裕民企業(yè)網(wǎng)站建設(shè),裕民品牌網(wǎng)站建設(shè),網(wǎng)站定制,裕民網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,裕民網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

組合式API

  • 組合式api(Composition API)算是vue3對我們開發(fā)者來說非常有價(jià)值的一個api更新,我們先不關(guān)注具體語法,先對它有一個大的感知

1. composition vs options

  • options API開發(fā)出來的vue應(yīng)用如左圖所示,它的特點(diǎn)是理解容易,因?yàn)楦鱾€選項(xiàng)都有固定的書寫位置,比如響應(yīng)式數(shù)據(jù)就寫到data選擇中,操作方法就寫到methods配置項(xiàng)中等,應(yīng)用大了之后,相信大家都遇到過來回上下找代碼的困境

  • composition API開發(fā)的vue應(yīng)用如右圖所示,它的特點(diǎn)是特定功能相關(guān)的所有東西都放到一起維護(hù),比如功能A相關(guān)的響應(yīng)式數(shù)據(jù),操作數(shù)據(jù)的方法等放到一起,這樣不管應(yīng)用多大,都可以快讀定位到某個功能的所有相關(guān)代碼,維護(hù)方便,設(shè)置如果功能復(fù)雜,代碼量大,我們還可以進(jìn)行邏輯拆分處理
    Vue3的組合式API實(shí)例應(yīng)用分析
    Vue3的組合式API實(shí)例應(yīng)用分析
    特別注意:

  • 選項(xiàng)式api和組合式api倆種風(fēng)格是并存的關(guān)系 并不是非此即彼

  • 需要大量的邏輯組合的場景,可以使用compition API進(jìn)行增強(qiáng)

2. 案例對比

上面我們通過圖示簡單了解了一下vue3帶來的全新的api形式,下面我們通過一個具體的小案例更加深入的體會一下倆種api下的開發(fā)模式對比,我們先暫時忽略語法細(xì)節(jié),只關(guān)注代碼編寫形式

2.1 理解需求

Vue3的組合式API實(shí)例應(yīng)用分析
倆個獨(dú)立的功能:

  • 通過點(diǎn)擊按鈕來控制p的顯示和隱藏

  • 通過點(diǎn)擊按鈕控制p內(nèi)字體顏色的變化

2.2 vue2.x option Api版本



2.3 vue3.0 composition api版本



2.4 composition api版本優(yōu)化

在這里可能會有疑惑,那我們現(xiàn)在是把功能相關(guān)的所有數(shù)據(jù)和行為放到一起維護(hù)了,如果應(yīng)用很大功能很多的情況下,setup函數(shù)不會變得很大嗎?豈不是又會變得比較難維護(hù),接下來我們就來拆解一下龐大的setup函數(shù)

以上,我們通過定義功能函數(shù),把倆個功能相關(guān)的代碼各自抽離到一個獨(dú)立的小函數(shù)中,然后通過在setUp函數(shù)中再把倆個小功能函數(shù)組合起來,這樣一來,我們既可以把setup函數(shù)變得清爽,又可以方便維護(hù)快速定位功能位置

到此我們沒有關(guān)注api細(xì)節(jié),只是體會組合式api給到我們的好處,接下來我們就要深入到api細(xì)節(jié),看看全新的api都該如何使用 ↓

3. setup入口函數(shù)

  1. setup 函數(shù)是一個新的組件選項(xiàng),作為組件中組合式API 的起點(diǎn)(入口)

  2. setup 中不能使用 this, this 指向 undefined

  3. setup函數(shù)只會在組件初始化的時候執(zhí)行一次

  4. setup函數(shù)在beforeCreate生命周期鉤子執(zhí)行之前執(zhí)行

export default {
  setup () {
    console.log('setup執(zhí)行了')
    console.log(this)
  },
  beforeCreate() {
    console.log('beforeCreate執(zhí)行了')
    console.log(this)
  }}

4. 響應(yīng)式系統(tǒng)API

4.1 reactive 函數(shù)

  • 作用:reactive是一個函數(shù),接收一個普通的對象傳入,把對象數(shù)據(jù)轉(zhuǎn)化為響應(yīng)式對象并返回

使用步驟

  • 從vue框架中導(dǎo)入reactive函數(shù)

  • 在setup函數(shù)中調(diào)用reactive函數(shù)并將對象數(shù)據(jù)傳入

  • 在setup函數(shù)中把reactive函數(shù)調(diào)用完畢之后的返回值以對象的形式返回出去

代碼落地



4.2 ref 函數(shù)

  • 作用:ref是一個函數(shù),接受一個簡單類型或者復(fù)雜類型的傳入并返回一個響應(yīng)式且可變的 ref 對象

使用步驟

  • 從vue框架中導(dǎo)出ref函數(shù)

  • 在setup函數(shù)中調(diào)用ref函數(shù)并傳入數(shù)據(jù)(簡單類型或者復(fù)雜類型)

  • 在setup函數(shù)中把ref函數(shù)調(diào)用完畢的返回值以對象的形式返回出去

  • 注意:在setup函數(shù)中使用ref結(jié)果,需要通過.value 訪問,模板中使用不需要加.value



總結(jié)說明:

  • ref 函數(shù)可以接收一個簡單類型的值,返回一個可改變的 ref 響應(yīng)式對象,從而彌補(bǔ)reactive函數(shù)不支持簡單類型的問題

  • reactive和ref函數(shù)都可以提供響應(yīng)式數(shù)據(jù)的轉(zhuǎn)換,具體什么時候需要使用哪個API社區(qū)還沒有最佳實(shí)踐,大家暫時可以使用自己熟練的API進(jìn)行轉(zhuǎn)換

  • 推薦一種寫法:只有我們明確知道要轉(zhuǎn)換的對象內(nèi)部的字段名稱我們才使用reactive,否則就一律使用ref,從而降低在語法選擇上的心智負(fù)擔(dān)

4.3 toRefs 函數(shù)

  • 場景: 經(jīng)過reactive函數(shù)處理之后返回的對象,如果給這個對象解構(gòu)或者展開,會讓數(shù)據(jù)丟失響應(yīng)式的能力,為了解決這個問題需要引入toRefs函數(shù),使用 toRefs函數(shù) 可以保證該對象展開的每個屬性都是響應(yīng)式的

4.3.1 問題復(fù)現(xiàn)

還是之前的案例,如果我們想在模板中省略到state,直接書寫name和age,你可能會想到,那我在return出去的時候把state中的屬性解構(gòu)出來不就好了

修改前



解構(gòu)修改后


  • 點(diǎn)擊改值按鈕,發(fā)現(xiàn)視圖已經(jīng)不發(fā)生變化了,這就是我們所說的,如果解構(gòu)reactive的返回值,將破壞調(diào)用響應(yīng)式特性,就需要我們使用toRefs方法進(jìn)行處理了

4.3.2 toRefs包裹處理


4.4 computed

  • 在setup函數(shù)中使用計(jì)算屬性函數(shù)

作用:根據(jù)現(xiàn)有響應(yīng)式數(shù)據(jù)經(jīng)過一定的計(jì)算得到全新的數(shù)據(jù)

使用步驟

  • 從vue框架中導(dǎo)入computed 函數(shù)

  • 在setup函數(shù)中執(zhí)行computed函數(shù),并傳入一個函數(shù),在函數(shù)中定義計(jì)算公式

  • 把computed函數(shù)調(diào)用完的執(zhí)行結(jié)果放到setup的return值對象中

4.5 watch 偵聽器

  • 在setup函數(shù)中偵聽器的使用

作用:基于響應(yīng)式數(shù)據(jù)的變化執(zhí)行回調(diào)邏輯,和vue2中的watch的功能完全一致

  • 普通監(jiān)聽

  • 立即執(zhí)行

  • 深度監(jiān)聽

使用步驟

  • 從vue框架中導(dǎo)入watch函數(shù)

  • 在setup函數(shù)中執(zhí)行watch函數(shù)開啟對響應(yīng)式數(shù)據(jù)的監(jiān)聽

  • watch函數(shù)接收三個常規(guī)參數(shù)

    1. 第一個參數(shù)為函數(shù),返回你要監(jiān)聽變化的響應(yīng)式數(shù)據(jù)

    2. 第二個參數(shù)為響應(yīng)式數(shù)據(jù)變化之后要執(zhí)行的回調(diào)函數(shù)

    3. 第三個參數(shù)為一個對象,在里面配置是否開啟立刻執(zhí)行或者深度監(jiān)聽

4.5.1 普通監(jiān)聽
4.5.2 開啟立刻執(zhí)行

watch的效果默認(rèn)狀態(tài)下,只有監(jiān)聽的數(shù)據(jù)發(fā)生變化才會執(zhí)行回調(diào),如果你需要在一上來的時候就立刻執(zhí)行一次,需要配置一下immediate屬性

4.5.3 開啟深度監(jiān)聽

當(dāng)我們監(jiān)聽的數(shù)據(jù)是一個對象的時候,默認(rèn)狀態(tài)下,對象內(nèi)部的屬性發(fā)生變化是不會引起回調(diào)函數(shù)執(zhí)行的,如果想讓對象下面所有屬性都能得到監(jiān)聽,需要開啟deep配置

4.5.4 更好的做法

使用watch的時候,盡量詳細(xì)的表明你到底要監(jiān)聽哪個屬性,避免使用deep引起的性能問題,比如我僅僅只是想在state對象的age屬性變化的時候執(zhí)行回調(diào),可以這么寫

5. 生命周期函數(shù)

使用步驟

  • 先從vue中導(dǎo)入以on打頭的生命周期鉤子函數(shù)

  • 在setup函數(shù)中調(diào)用生命周期函數(shù)并傳入回調(diào)函數(shù)

  • 生命周期鉤子函數(shù)可以調(diào)用多次



選項(xiàng)式API組合式API
beforeCreate不需要(直接寫到setup函數(shù)中)
created不需要(直接寫到setup函數(shù)中)
beforeMountonBeforeMount
mountedonMounted
beforeUpdateonBeforeUpdate
updatedonUpdated
beforeDestroyedonBeforeUnmount
destroyedonUnmounted

6. 父子通信

在vue3的組合式API中,父傳子的基礎(chǔ)套路完全一樣,基礎(chǔ)思想依舊為:父傳子是通過prop進(jìn)行傳入,子傳父通過調(diào)用自定義事件完成

實(shí)現(xiàn)步驟

  • setup函數(shù)提供倆個參數(shù),第一個參數(shù)為props,第二個參數(shù)為一個對象context

  • props為一個對象,內(nèi)部包含了父組件傳遞過來的所有prop數(shù)據(jù),context對象包含了attrs,slots, emit屬性,其中的emit可以觸發(fā)自定義事件的執(zhí)行從而完成子傳父

代碼落地
app.vue

components/son.vue



7. provide 和 inject

通常我們使用props進(jìn)行父子之間的數(shù)據(jù)傳遞,但是如果組件嵌套層級較深,一層一層往下傳遞將會變的非常繁瑣,有沒有一種手段可以把這個過程簡化一下呢,有的,就是我們馬上要學(xué)習(xí)的provide 和 inject,它們配合起來可以方便的完成跨層傳遞數(shù)據(jù)

Vue3的組合式API實(shí)例應(yīng)用分析

7.1 基礎(chǔ)使用
  • 在setup函數(shù)中使用provide和inject的基礎(chǔ)用法

來個需求: 爺組件中有一份數(shù)據(jù) 傳遞給孫組件直接使用
Vue3的組合式API實(shí)例應(yīng)用分析

實(shí)現(xiàn)步驟:

  • 頂層組件在setup方法中使用provide函數(shù)提供數(shù)據(jù)

  • 任何底層組件在setup方法中使用inject函數(shù)獲取數(shù)據(jù)

代碼落地
爺爺組件 - app.vue

孫組件 - components/Son.vue

事實(shí)上,只要是后代組件,都可以方便的獲取頂層組件提供的數(shù)據(jù)

7.2 傳遞響應(yīng)式數(shù)據(jù)

provide默認(rèn)情況下傳遞的數(shù)據(jù)不是響應(yīng)式的,也就是如果對provide提供的數(shù)據(jù)進(jìn)行修改,并不能響應(yīng)式的影響到底層組件使用數(shù)據(jù)的地方,如果想要傳遞響應(yīng)數(shù)據(jù)也非常簡單,只需要將傳遞的數(shù)據(jù)使用ref或者reactive生成即可

  • 通過provide/inject傳遞響應(yīng)式數(shù)據(jù)
    app.vue

8. 模板中 ref 的使用

在模板中使用ref,我們都很清楚,它一般有三種使用場景

  • ref + 普通dom標(biāo)簽 獲取真實(shí)dom對象

  • ref + 組件標(biāo)簽 獲取組件實(shí)例對象

  • ref + v-for 獲取由dom對象(實(shí)例對象)組成的數(shù)組 (不經(jīng)常使用)

  • 在setup函數(shù)中使用ref獲取真實(shí)dom獲取組件實(shí)例的方法

實(shí)現(xiàn)步驟

  • 使用ref函數(shù)傳入null創(chuàng)建 ref對象 => const hRef = ref(null)

  • 模板中通過定義ref屬性等于1中創(chuàng)建的ref對象名稱建立關(guān)聯(lián) =>

  • 使用 =>hRef.value

代碼落地
components/RefComponent.vue

app.vue

9. 來個案例吧 - Todos

核心功能

  • 渲染列表數(shù)據(jù) v-for

  • 點(diǎn)擊刪除當(dāng)前列表 splice + index

  • 回車添加新項(xiàng)目 @keyup.enter=“addTodo” list.unshift

  • 選擇狀態(tài)切換 v-model

  • 多選和取消多選 計(jì)算屬性的set和get

  • 未完成任務(wù)數(shù)量統(tǒng)計(jì) computed

關(guān)于“Vue3的組合式API實(shí)例應(yīng)用分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點(diǎn)。


當(dāng)前名稱:Vue3的組合式API實(shí)例應(yīng)用分析
分享地址:http://weahome.cn/article/pogeps.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部