Vue3 composition(組合式)API詳解

    VUE3中關于組合式API的詳解

    什么是Vue3的組合式 API?

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

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

    在 Vue 3 中,組合式 API 基本上都會配合<script setup>語法在單文件組件中使用。

    Vue3 composition(組合式)API詳解
    Vue3 composition(組合式)API詳解

    組合式api所做的

    組合式api所實現就是將業務流程集中化,而不是碎片化,業務流程隨著時間滾動。形成一個時間流式的業務流。

    為什么要有組合式 API?

    更好的邏輯復用

    組合式 API 最基本的優勢是它使我們能夠通過組合函數來實現更加簡潔高效的邏輯復用。在選項式 API 中我們主要的邏輯復用機制是 mixins,而組合式 API 解決了?mixins 的所有缺陷

    組合式 API 提供的邏輯復用能力孵化了一些非常棒的社區項目,比如?VueUse,一個不斷成長的工具型組合式函數集合。組合式 API 還為其他第三方狀態管理庫與 Vue 的響應式系統之間的集成提供了一套簡潔清晰的機制,例如?RxJS

    更靈活的代碼組織

    許多用戶喜歡選項式 API 的原因是因為它在默認情況下就能夠讓人寫出有組織的代碼:大部分代碼都自然地被放進了對應的選項里。然而,選項式 API 在單個組件的邏輯復雜到一定程度時,會面臨一些無法忽視的限制。這些限制主要體現在需要處理多個邏輯關注點的組件中,這是我們在許多 Vue 2 的實際案例中所觀察到的。

    我們以 Vue CLI GUI 中的文件瀏覽器組件為例:這個組件承擔了以下幾個邏輯關注點:

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

    你可以看到,處理相同邏輯關注點的代碼被強制拆分在了不同的選項中,位于文件的不同部分。在一個幾百行的大組件中,要讀懂代碼中的一個邏輯關注點,需要在文件中反復上下滾動,這并不理想。

    另外,如果我們想要將一個邏輯關注點抽取重構到一個可復用的工具函數中,需要從文件的多個不同部分找到所需的正確片段。

    而如果用組合式 API 重構這個組件,將會變成下面右邊這樣:

    Vue3 composition(組合式)API詳解

    響應式(核心類)

    1. ref()--定義響應式數據

    ref()接受一個基本數據類型的參數,返回一個響應式的、可更改的 ref 對象,此對象只有一個指向其內部值的屬性?.value。如果將一個對象賦值給 ref,那么這個對象將通過?reactive()?轉為具有深層次響應式的對象。

    Vue3 composition(組合式)API詳解-Npcink
    Vue3 composition(組合式)API詳解-Npcink

    Vue3 composition(組合式)API詳解

    2. reactive()--定義響應式數據

    reactive()接受一個對象,包括json數據和數組都可以,返回一個對象的響應式代理。

    3. computed()--計算屬性

    computed()接受一個 getter 函數,返回一個只讀的響應式?ref對象。該 ref 通過?.value?暴露 getter 函數的返回值。它也可以接受一個帶有?get?和?set?函數的對象來創建一個可寫的 ref 對象。

    4.watch()--監聽

    watch()監聽一個或多個響應式數據源,并在數據源變化時調用所給的回調函數。默認是懶監聽,即源發生變化時才執行回調函數。函數接受三個參數:

    1. 監聽器的源數據(一個函數,返回一個值。一個ref。一個響應式對象。或以上三種類型組成的數組)
    2. 第二個參數是在發生變化時要調用的回調函數。接受三個參數:新值、舊值,以及一個用于注冊副作用清理的回調函數
    3. 第三個可選的參數是一個對象(對象屬性支持 immediate,deep,flush,onTrack / onTrigger

    5. watchEffect()

    watchEffect()立即運行一個函數,同時響應式地追蹤其依賴,并在依賴更改時重新執行。

    • 第一個參數就是要運行的副作用函數
    • 第二個參數就是一個可選的對象,跟watch第三個參數一致

    watch() 跟 watchEffect()區別

    • 1. watch是惰性執行,也就是只有監聽的值發生變化的時候才會執行,但是watchEffect不同,每次代碼加載watchEffect都會執行。
    • 2. watch?會明確監聽某一個數據,而?watchEffect?則是監聽回調函數中響應數據。
    • 3. watch可以訪問之前的值,而watchEffect不可以。

    注意

    1、setup是vue3中的一個全新的配置項,值為一個函數

    2、setup是所有CompositionAPI(組合API)的基礎,組件中所用到的數據、方法等都需要在setup中進行配置;

    setup中的兩種返回值

    返回一個對象,對象中的屬性、方法,在模板中均可直接使用(重點

    export default {
      name: 'App',
      setup(){
        // 數據
        let name = '張三'
        let age = '18'
     
        // 方法
        function sayHello(){
          alert(`我叫${name},我${age}歲了,你好啊`)
        }
     
        // 第一種return,返回一個對象
        return{
          name,
          age,
          sayHello
        }
      }
    }
    

    返回一個渲染函數:可以自定義渲染內容(了解)

    export default {
      name: 'App',
      setup(){
        // 數據
        let name = '張三'
        let age = '18'
     
        // 方法
        function sayHello(){
          alert(`我叫${name},我${age}歲了,你好啊`)
        }
     
        // 第二種return,返回一個渲染函數
        return ()=> { return h('h1','尚硅谷') }
     
        // 簡寫
        // return ()=> h('h1','尚硅谷') 
      }
    }

    setup不能是一個async函數,因為返回值不再是return的對象,而是promise,模板看不到return對象中的屬性;

    參考文章

    VUE模塊

    reactive - Vue3 composition(組合式)API

    2022-9-1 16:13:44

    VUE模塊

    ref - Vue3 composition(組合式)API

    2022-9-1 18:00:32

    ??
    Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    0 條回復 A文章作者 M管理員
      暫無討論,說說你的看法吧
    ?
    個人中心
    購物車
    優惠劵
    今日簽到
    有新私信 私信列表
    搜索
    主站蜘蛛池模板: 国产精品被窝福利一区| 老熟女高潮一区二区三区| 色窝窝无码一区二区三区| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 三级韩国一区久久二区综合| 天堂一区人妻无码| 成人久久精品一区二区三区| 亚洲AV无码片一区二区三区| 国产拳头交一区二区| 久久影院亚洲一区| 2022年亚洲午夜一区二区福利| 国产成人精品视频一区二区不卡| 亚洲一区二区三区首页| 无码视频一区二区三区| 国产一区二区三区不卡AV| 亚洲国产AV无码一区二区三区| 国产情侣一区二区| 国产剧情国产精品一区| 国产一区二区在线| 一本大道在线无码一区| 天堂不卡一区二区视频在线观看| 2014AV天堂无码一区| 亚洲av无码一区二区三区四区| 中文字幕一区精品| 精品人妻一区二区三区四区| 精品无码AV一区二区三区不卡| 在线电影一区二区| 精品欧洲AV无码一区二区男男| 夜夜精品视频一区二区| 人妻久久久一区二区三区| 免费人妻精品一区二区三区| 亚洲综合av一区二区三区| 一区二区三区在线|欧| 中文字幕无码一区二区免费| 日韩经典精品无码一区| 精品国产一区二区三区AV| 日韩好片一区二区在线看| 国产成人综合一区精品| 日本一区精品久久久久影院| 精品视频在线观看你懂的一区| 精品视频一区二区观看|