亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue  composition-api 封裝組合式函數(shù)的操作方法

 更新時(shí)間:2022年10月10日 11:14:17   作者:前端迷悟  
在 Vue 應(yīng)用的概念中,“組合式函數(shù)”(Composables) 是一個(gè)利用 Vue 的組合式 API 來(lái)封裝和復(fù)用有狀態(tài)邏輯的函數(shù),這篇文章主要介紹了vue  composition-api 封裝組合式函數(shù)的操作方法,需要的朋友可以參考下

介紹

在 Vue 應(yīng)用的概念中,“組合式函數(shù)”(Composables) 是一個(gè)利用 Vue 的組合式 API 來(lái)封裝和復(fù)用有狀態(tài)邏輯的函數(shù)。

Composables 函數(shù)就是利用 Vue3 提出的 Composition API ,封裝出的一些可以復(fù)用的組合式函數(shù),目前 Vue2 也可以使用(2.7 版本可以直接使用,2.6 需要引入另外composition-api的插件)。還沒寫過這種風(fēng)格代碼的同學(xué),可以先看引用的官方文檔的兩個(gè)鏈接,介紹的比較詳細(xì)。

下面我簡(jiǎn)單介紹一下: 組合式 API 的靈感來(lái)自Hooks,也是目前流行的函數(shù)式編程的思想,便于邏輯復(fù)用、測(cè)試以及類型推導(dǎo),編寫Vue業(yè)務(wù)代碼的時(shí)候會(huì)更加的靈活。但組合式 API 不等于函數(shù)式編程,組合式 API 的特點(diǎn)是基于Vue數(shù)據(jù)響應(yīng)系統(tǒng)的,而函數(shù)式編程通常強(qiáng)調(diào)數(shù)據(jù)不可變的。 組合式API 包括:

  • 響應(yīng)式相關(guān)(ref、reactive、computed、watch 等)
  • 生命周期鉤子(onMounted 和 onUnmounted 等)
  • provide、inject 等

一個(gè)簡(jiǎn)單的組合式函數(shù)示例和使用:

import { computed } from 'vue'

export function useAdd(a,b) {
 return computed(() => a.value + b.value)
}
import { ref } from 'vue'
import { useAdd } from './add.js
const a = ref(1)
const b = ref(2)
const c = useAdd(a,b)

最佳實(shí)踐

像寫工具函數(shù)一樣,組合式函數(shù)也要設(shè)計(jì)好函數(shù)的接口,設(shè)計(jì)函數(shù)入?yún)⒌念愋鸵约澳J(rèn)值和返回值是什么樣,以及后期的可擴(kuò)展性。

1. options對(duì)象化

編寫組合式函數(shù)時(shí)如果傳入一些配置參數(shù),可以把配置參數(shù)設(shè)計(jì)為 options 對(duì)象,好處就是不需要記住參數(shù)的位置,以及方便后期的擴(kuò)展,可通過 TS 類型提示。如 Lodash 的防抖節(jié)流函數(shù),配置項(xiàng)也是放在 options 對(duì)象里的。 函數(shù)內(nèi)部實(shí)現(xiàn)通過解構(gòu)獲取 options 的配置項(xiàng),可以賦值默認(rèn)值

export function useTitle(newTitle = null, options = {}) {
  const {
    document = defaultDocument,
    observe = false,
    titleTemplate = '%s',
  } = options
  // ...
}

2. 動(dòng)態(tài)返回

通過 options 的配置項(xiàng),可以動(dòng)態(tài)返回不同的值

export default useNow(options) {
  const { controls = false } = options;

  // ...

  if (!controls) {
    return value;
  } else {
     return { value, controlAction1, controlAction2 };
  }
}

如:useNow vueuse.org/core/useNow…

import { useNow } from '@vueuse/core'

const now = useNow()

// 返回控制暫停/恢復(fù)的函數(shù)
const { now, pause, resume } = useNow({ controls: true })

3. 靈活地使用ref

入?yún)⒃谑褂玫倪^程中可能是普通類型或 ref 類型:

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

如果函數(shù)內(nèi)部期待入?yún)⑹瞧胀愋停鞘褂谜呖赡軅魅腠憫?yīng)式的 Ref 類型,可以使用 unref 函數(shù)獲取值,兼容 ref類型:

import { unref } from 'vue'

function useFeature(maybeRef) {
  const value = unref(maybeRef)
  //...
}

unref 的實(shí)現(xiàn):

function unref <T> (r:Ref<T>|T): T) {
  return isRef(r) ? r.value : r
}

如果函數(shù)內(nèi)部入?yún)⑹?ref 類型的,可以再使用 ref 函數(shù)包裹,該函數(shù)如果傳入一個(gè)ref類型的參數(shù)會(huì)原樣返回。

import { ref, watch } from 'vue'
export function useTitle(newTitle) {
  const title = ref(newTitle || document.title)
  watch(title, (t) => {
    if (t != null) document.title = t}, 
        { immediate: true }
  )
  return title
}

4. 異步變同步

通過響應(yīng)式數(shù)據(jù)的連接,不必使用await,在等待異步請(qǐng)求返回后將數(shù)據(jù)進(jìn)行更新。如:

const { res } = useFetch('https://xxx.com/').json()
const data = computed(() => res.value?.data)
import { shallowRef } from 'vue'

export function useFetch<>(url) {
    const data = shallowRef(null)
    const error = shallowRef(null)
    fetch(unref(url)).then(r => r.json())
    .then(r => data.value = r)
    .catch(e => error.value = e)

  return {
        data,
        error
    }
}

5. 簡(jiǎn)單的狀態(tài)管理

由于響應(yīng)性系統(tǒng)與組件層是解耦的,簡(jiǎn)單的場(chǎng)景下我們可以使用 reactive 創(chuàng)建一個(gè)響應(yīng)式對(duì)象,在多個(gè)組件實(shí)例間共享數(shù)據(jù)。

// store.js
import { reactive } from 'vue'

export const store = reactive({
  a: 0,
  b: 1
})

復(fù)雜場(chǎng)景則需要使用 pinia 進(jìn)行狀態(tài)管理

參考資料

到此這篇關(guān)于vue composition-api 封裝組合式函數(shù)的操作方法的文章就介紹到這了,更多相關(guān)vue composition-api 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決vue項(xiàng)目nginx部署到非根目錄下刷新空白的問題

    解決vue項(xiàng)目nginx部署到非根目錄下刷新空白的問題

    今天小編就為大家分享一篇解決vue項(xiàng)目nginx部署到非根目錄下刷新空白的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-09-09
  • vue全局自定義指令-元素拖拽的實(shí)現(xiàn)代碼

    vue全局自定義指令-元素拖拽的實(shí)現(xiàn)代碼

    這篇文章主要介紹了面板拖拽之vue自定義指令,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • vue antd Form表單的使用及說明

    vue antd Form表單的使用及說明

    這篇文章主要介紹了vue antd Form表單的使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue3.0?router路由跳轉(zhuǎn)傳參問題(router.push)

    vue3.0?router路由跳轉(zhuǎn)傳參問題(router.push)

    這篇文章主要介紹了vue3.0?router路由跳轉(zhuǎn)傳參問題(router.push),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Vue nextTick延遲回調(diào)獲取更新后DOM機(jī)制詳解

    Vue nextTick延遲回調(diào)獲取更新后DOM機(jī)制詳解

    這篇文章主要為大家介紹了Vue nextTick延遲回調(diào)獲取更新后DOM機(jī)制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Nuxt引用cookie-universal-nuxt在服務(wù)端請(qǐng)求cookie方式

    Nuxt引用cookie-universal-nuxt在服務(wù)端請(qǐng)求cookie方式

    這篇文章主要介紹了Nuxt引用cookie-universal-nuxt在服務(wù)端請(qǐng)求cookie方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Element Badge標(biāo)記的使用方法

    Element Badge標(biāo)記的使用方法

    這篇文章主要介紹了Element Badge標(biāo)記的使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Vue3全局配置Axios并解決跨域請(qǐng)求問題示例詳解

    Vue3全局配置Axios并解決跨域請(qǐng)求問題示例詳解

    axios 是一個(gè)基于promise的HTTP庫(kù),支持promise所有的API,本文給大家介紹Vue3全局配置Axios并解決跨域請(qǐng)求問題,內(nèi)容從axios部署開始到解決跨域問題,感興趣的朋友一起看看吧
    2023-11-11
  • 詳解基于iview-ui的導(dǎo)航欄路徑(面包屑)配置

    詳解基于iview-ui的導(dǎo)航欄路徑(面包屑)配置

    這篇文章主要介紹了詳解基于iview-ui的導(dǎo)航欄路徑(面包屑)配置,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2019-02-02
  • 一文帶你了解什么是Vue的前端微服務(wù)架構(gòu)(Micro Frontends)

    一文帶你了解什么是Vue的前端微服務(wù)架構(gòu)(Micro Frontends)

    微前端架構(gòu)是一種將大型前端應(yīng)用拆分為多個(gè)小型、獨(dú)立的前端應(yīng)用的架構(gòu)風(fēng)格,每個(gè)小型前端應(yīng)用都可以獨(dú)立部署、獨(dú)立開發(fā)和獨(dú)立運(yùn)行,下面我們就來(lái)學(xué)習(xí)一下它的相關(guān)使用吧
    2023-11-11

最新評(píng)論