国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue 可組合項的良好實(shí)踐和設(shè)計模式

按照一個系統(tǒng)的來說,可組合項負(fù)責(zé)存儲主要業(yè)務(wù)邏輯(如計算、操作、流程),因此它們是應(yīng)用程序的關(guān)鍵部分。

通過重構(gòu)構(gòu)建新可組合項的方法,使它們可維護(hù)、易于測試且真正有用。

在本文中,我將總結(jié)我們創(chuàng)建的想法,并將它們與我在幾篇文章中讀到的良好實(shí)踐和設(shè)計模式相結(jié)合。

所以本文將分為三個部分:

  1. 通用設(shè)計模式

  2. 我的建議

  3. 進(jìn)一步閱讀

享受并且讓我知道您在項目中使用的模式和實(shí)踐??

通用設(shè)計模式

我認(rèn)為了解構(gòu)建可組合項模式的最佳來源實(shí)際上是 Vue.js 文檔,您可以在此處查看(https://vuejs.org/guide/reusability/composables.html)

基本可組合

Vue 文檔顯示了以下 useMouse 可組合項的示例:

Vue 文檔顯示了以下 useMouse 可組合項的示例:
// mouse.js
import { ref, onMounted, onUnmounted } from 'vue'

// 按照慣例,可組合函數(shù)名稱以“use”開頭
export function useMouse() {
  // 由可組合項封裝和管理的狀態(tài)
  const x = ref(0)
  const y = ref(0)

  // 可組合項可以隨著時間的推移更新其托管狀態(tài)。
  function update(event) {
    x.value = event.pageX
    y.value = event.pageY
  }

  // 可組合項還可以掛接到其所有者組件的
  // 設(shè)置和拆卸副作用的生命周期。
  onMounted(() => window.addEventListener('mousemove', update))
  onUnmounted(() => window.removeEventListener('mousemove', update))

  // 將托管狀態(tài)公開為返回值
  return { x, y }
}

稍后可以在組件中使用它,如下所示:

<script setup>
import { useMouse } from './mouse.js'

const { x, y } = useMouse()
</script>
<template>Mouse position is at: {{ x }}, {{ y }}</template>

異步可組合項

為了獲取數(shù)據(jù),Vue 建議使用以下可組合結(jié)構(gòu):

import { ref, watchEffect, toValue } from 'vue'

export function useFetch(url) {
  const data = ref(null)
  const error = ref(null)

  watchEffect(() => {
    // 獲取之前重置狀態(tài)..
    data.value = null
    error.value = null
    // toValue() 解開潛在的 refs 或 getters
    fetch(toValue(url))
      .then((res) => res.json())
      .then((json) => (data.value = json))
      .catch((err) => (error.value = err))
  })

  return { data, error }
}

然后可以在組件中使用它,如下所示:

<script setup>
import { useFetch } from './fetch.js'

const { data, error } = useFetch('...')
</script>

可組合合約

根據(jù)上面的示例,以下是所有可組合項都應(yīng)遵循的約定:

  1. 例如,可組合文件名應(yīng)以 use 開頭useSomeAmazingFeature.ts

  2. 它可以接受輸入?yún)?shù),這些參數(shù)可以是字符串等基本類型,也可以接受 refs 和 getter,但它需要使用 toValue 幫助器

  3. 可組合項應(yīng)該返回一個 ref 值,可以在解構(gòu)可組合項后訪問該值,例如const { x, y } = useMouse()

  4. 可組合項可以保存可以在應(yīng)用程序中訪問和修改的全局狀態(tài)。

  5. 可組合性可能會導(dǎo)致副作用,例如添加窗口事件偵聽器,但在卸載組件時應(yīng)清除它們。

  6. <script setup>可組合項只能在鉤子中調(diào)用setup()。它們也應(yīng)該在這些上下文中同步調(diào)用。在某些情況下,您還可以在生命周期掛鉤中調(diào)用它們,例如onMounted().

  7. 可組合項可以調(diào)用內(nèi)部的其他可組合項。

  8. 可組合項應(yīng)在內(nèi)部包裝某些邏輯,當(dāng)過于復(fù)雜時,應(yīng)將它們提取到單獨(dú)的可組合項中以便于測試。

我的建議

我已經(jīng)為我的工作項目和開源項目構(gòu)建了多個可組合項 - NuxtAlgolia、NuxtCloudinary、NuxtMedusa,因此基于這些,我想根據(jù)我的經(jīng)驗在上面的合同中添加一些要點(diǎn)。

>有狀態(tài)或/和純函數(shù)可組合項

在代碼標(biāo)準(zhǔn)化的某個時刻,您可能會得出這樣的結(jié)論:您希望對可組合項中的狀態(tài)保留做出決定。

最容易測試的函數(shù)是那些不存儲任何狀態(tài)的函數(shù)(即它們是簡單的輸入/輸出函數(shù)),例如負(fù)責(zé)將字節(jié)轉(zhuǎn)換為人類可讀值的可組合函數(shù)。它接受一個值并返回一個不同的值 - 它不存儲任何狀態(tài)。

別誤會我的意思,你不必做出決定OR。您可以完全保留有狀態(tài)和無狀態(tài)可組合項。但這應(yīng)該是一個書面決定,以便以后更容易與他們合作 ??

可組合項的單元測試

我們希望使用 Vitest 為我們的前端應(yīng)用程序?qū)嵤﹩卧獪y試。在后端工作時,進(jìn)行單元測試代碼覆蓋率非常有用,因為您主要關(guān)注邏輯。然而,在前端,您通常使用視覺效果。

因此,我們認(rèn)為對整個組件進(jìn)行單元測試可能不是最好的主意,因為我們基本上將對框架本身進(jìn)行單元測試(如果按下按鈕,檢查狀態(tài)是否更改或模式是否打開)。

由于我們已將所有業(yè)務(wù)邏輯移至可組合項(基本上是 TypeScript 函數(shù))內(nèi),因此它們很容易使用 Vitest 進(jìn)行測試,并且允許我們擁有更穩(wěn)定的系統(tǒng)。

可組合項的范圍

不久前,在 VueStorefront 中,我們開發(fā)了自己的可組合方法(早在它們實(shí)際上像這樣被調(diào)用之前)。在我們的方法中,我們使用可組合項來映射電子商務(wù)的業(yè)務(wù)領(lǐng)域,如下所示:

const { cart, load, addItem, removeItem, remove, ... } = useCart()

這種方法絕對有用,因為它允許將域包裝在一個函數(shù)中。在諸如useProduct或 之useCategory類的更簡單的示例中,實(shí)現(xiàn)和維護(hù)相對簡單。然而,正如您在此處的示例中所看到的,useCart當(dāng)包裝一個包含更多邏輯而不僅僅是數(shù)據(jù)獲取的域時,這個可組合項正在發(fā)展成為一種非常難以開發(fā)和維護(hù)的形狀。

此時,我開始為 Nuxt 生態(tài)系統(tǒng)做出貢獻(xiàn),其中引入了不同的方法。在這種新方法中,每個可組合項僅負(fù)責(zé)一件事。因此,useCart我們的想法不是構(gòu)建一個巨大的可組合項,而是為每個功能構(gòu)建可組合項useAddToCart,例如useFetchCart,,,useRemovefromCart等等。

因此,維護(hù)和測試這些可組合項應(yīng)該更容易 ??

進(jìn)一步閱讀

這將是我的研究的全部內(nèi)容。如果您想了解有關(guān)此主題的更多信息,請務(wù)必查看以下文章:

  • https://vuejs.org/guide/reusability/composables.html

  • https://vueschool.io/articles/vuejs-tutorials/what-is-a-vue-js-composable/

  • https://blog.logrocket.com/getting-started-vue-composables/

  • https://macopedia.com/blog/news/how-can-vue-3-composables-make-your-life-easier

Vue 可組合項的良好實(shí)踐和設(shè)計模式文章來源地址http://www.zghlxwxcb.cn/article/339.html

到此這篇關(guān)于Vue 可組合項的良好實(shí)踐和設(shè)計模式的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

原文地址:http://www.zghlxwxcb.cn/article/339.html

如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請聯(lián)系站長進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【設(shè)計模式】組合模式實(shí)現(xiàn)部門樹實(shí)踐

    【設(shè)計模式】組合模式實(shí)現(xiàn)部門樹實(shí)踐

    幾乎在每一個系統(tǒng)的開發(fā)過程中,都會遇到一些 樹狀 結(jié)構(gòu)的開發(fā)需求,例如:組織機(jī)構(gòu)樹,部門樹,菜單樹等。只要是需要開發(fā)這種樹狀結(jié)構(gòu)的需求,我們都可以使用組合模式來完成。 本篇將結(jié)合組合模式與 Mysql 實(shí)現(xiàn)一個部門樹,完成其增刪改和樹形結(jié)構(gòu)的組裝。 組合模

    2024年02月09日
    瀏覽(19)
  • 【Vue】Vue 前端設(shè)計模式梳理

    【Vue】Vue 前端設(shè)計模式梳理

    一、什么是設(shè)計模式? 設(shè)計模式是一套被反復(fù)使用、多數(shù)人知曉、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié)。它是為了可重用代碼,讓代碼更容易的被他人理解并保證代碼的可靠性。 設(shè)計模式實(shí)際上是“拿來主義”在軟件領(lǐng)域的貫徹實(shí)踐,它是一套現(xiàn)成的工具,拿來即用。下

    2024年02月01日
    瀏覽(25)
  • AI問答:前端需要掌握的設(shè)計模式/vue項目使用了哪些設(shè)計模式/vue項目開發(fā)可以使用哪些設(shè)計模式

    AI問答:前端需要掌握的設(shè)計模式/vue項目使用了哪些設(shè)計模式/vue項目開發(fā)可以使用哪些設(shè)計模式

    一、理解什么是設(shè)計模式 設(shè)計模式是對軟件設(shè)計開發(fā)過程中反復(fù)出現(xiàn)的某類問題的通用解決方案。 設(shè)計模式是一個在軟件設(shè)計領(lǐng)域中被廣泛應(yīng)用的概念,它指的是一套被公認(rèn)為有效的解決特定問題的設(shè)計思路和方法。 設(shè)計模式更多的是指導(dǎo)思想和方法論,而不是現(xiàn)成的代碼

    2024年02月09日
    瀏覽(24)
  • Vue 設(shè)計模式

    Vue 設(shè)計模式

    一、什么是設(shè)計模式? 設(shè)計模式是一套被反復(fù)使用、多數(shù)人知曉、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié)。它是為了可重用代碼,讓代碼更容易的被他人理解并保證代碼的可靠性。 ? ? ?設(shè)計模式實(shí)際上是“拿來主義”在軟件領(lǐng)域的貫徹實(shí)踐,它是一套現(xiàn)成的工具,拿來即用

    2024年02月07日
    瀏覽(19)
  • 設(shè)計模式——組合模式

    設(shè)計模式——組合模式

    組合模式(Composite Pattern):組合多個對象形成樹形結(jié)構(gòu)以表示具有“整體—部分”關(guān)系的層次結(jié)構(gòu)。組合模式對單個對象(即葉子對象)和組合對象(即容器對象)的使用具有一致性,組合模式又可以稱為“整體—部分”(Part-Whole)模式,它是一種對象結(jié)構(gòu)型模式。 組合模式將

    2024年02月11日
    瀏覽(32)
  • 設(shè)計模式——組合模式08

    設(shè)計模式——組合模式08

    組合模式:把類似對象或方法組合成結(jié)構(gòu)為樹狀的設(shè)計思路。 例如部門之間的關(guān)系。 設(shè)計模式,一定要敲代碼理解 滿足開閉原則。葉子結(jié)點(diǎn)與非葉子結(jié)點(diǎn)都繼承或?qū)崿F(xiàn)同一抽象,只是葉子功能權(quán)限少,而非葉子結(jié)點(diǎn)需要容器記錄子節(jié)點(diǎn)。 代碼下載

    2024年04月11日
    瀏覽(25)
  • 設(shè)計模式-組合模式

    設(shè)計模式-組合模式

    組合模式可以使用一棵樹來表示 組合模式使得用戶可以使用一致的方法操作單個對象和組合對象 組合模式又叫部分整體模式,將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),可以更好的實(shí)現(xiàn)管理操作,部分-整體對象的操作基本一樣,但是應(yīng)該還會有不一樣的地方

    2024年02月10日
    瀏覽(26)
  • 設(shè)計模式:組合模式

    組合模式是一種結(jié)構(gòu)型設(shè)計模式,用于將對象組織成樹形結(jié)構(gòu),以表示“部分-整體”的層次結(jié)構(gòu)。組合模式使得客戶端可以統(tǒng)一地處理單個對象和組合對象,而不需要區(qū)分它們之間的差異。 在組合模式中,有兩種主要類型的對象:葉節(jié)點(diǎn)和組合節(jié)點(diǎn)。葉節(jié)點(diǎn)表示樹結(jié)構(gòu)中的

    2024年02月07日
    瀏覽(24)
  • 設(shè)計模式--組合模式

    設(shè)計模式--組合模式

    某日,小明公司最近接到一個辦公管理系統(tǒng)的項目,并且在每個城市都有分部。這屬于是很常見的OA系統(tǒng),只要前期將需求分析完善好,中后期開發(fā)維護(hù)是不難的。 然而,總部公司使用后覺得很OK,想要其他城市的分公司也執(zhí)行使用。但是現(xiàn)在的問題是,其他分公司的部門和

    2024年01月21日
    瀏覽(27)
  • 設(shè)計模式——10. 組合模式

    組合模式是一種結(jié)構(gòu)型設(shè)計模式,用于將對象組合成樹狀結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。它允許客戶端以一致的方式處理單個對象和組合對象(包含多個對象的容器),使得客戶端無需關(guān)心它們之間的差異。 組合模式通常涉及兩種主要角色: 葉子節(jié)點(diǎn)(Leaf):這是組

    2024年02月07日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包