目錄
代碼組成
提取可重複使用的代碼
總結
可以獨立生活的一般功能,而無需與任何特定組件結合
可重複使用的功能,用於多個組件
組件中的代碼組織
請記住:這是一個正在進行的工作!
首頁 web前端 css教學 早期查看野外VUE 3組成的API

早期查看野外VUE 3組成的API

Apr 14, 2025 am 10:13 AM

早期查看野外VUE 3組成的API

最近,我有機會嘗試在一個真實項目中嘗試新的VUE組成API,以檢查其在哪裡可能有用以及我們將來如何使用它。

到目前為止,當我們創建一個新組件時,我們正在使用選項API。該API迫使我們通過選項將組件的代碼分開,這意味著我們需要在一個位置(數據),一個位置(計算),所有方法,一個位置(方法)(方法)等所有反應性數據(數據)等。

由於較小的組件非常方便且可讀,因此當組件變得更加複雜並處理多種功能時,它會變得痛苦。通常,與一個特定功能相關的邏輯包含一些反應性數據,計算的屬性,一種方法或其中一些。有時,它還涉及使用組件生命週鉤。這會使您在處理單個邏輯問題時不斷地在代碼中的不同選項之間跳躍。

與VUE合作時可能遇到的另一個問題是如何提取可以通過多個組件重複使用的常見邏輯。 Vue已經幾乎沒有選擇,但是所有這些都有自己的缺點(例如Mixins和Scoped-Slots)。

構圖API帶來了一種創建組件,分離代碼和提取可重複使用的代碼的新方法。

讓我們從組件中的代碼組成開始。

代碼組成

想像一下,您有一個主要組件,可以為整個VUE應用程序設置一些內容(例如NUXT中的佈局)。它處理以下內容:

  • 設置環境
  • 檢查用戶是否仍經過身份驗證,並將其重定向(如果沒有)
  • 防止用戶重新加載應用程序太多次
  • 跟踪用戶活動並在用戶在特定時間段內不活動時做出反應
  • 使用EventBus(或窗口對象事件)在事件上聆聽

這些只是組件可以做的幾件事。您可能可以想像一個更複雜的組件,但這將達到此示例的目的。為了可讀性,我只是使用沒有實際實施的道具的名稱。

這就是組件的外觀,就像使用“選項” API:

 
  <div>
    ...
  </div>


<script>
導出默認{
  名稱:&#39;app&#39;,

  數據() {
    返回 {
      userActivityTime out:null,
      lastuseractivity:null,
      重新載體:0
    }
  },,

  計算:{
    Isauthenticated(){...}
    locale(){...}
  },,

  手錶: {
    語言環境(value){...},
    等法(value){...}
  },,

  異步創建(){
    const initiallocale = localstorage.getItem(&#39;locale&#39;)
    等待this.loadlocaleasync(initiallocale)
  },,

  安裝(){
    eventbus。 $ on(my_event,this.handlemyevent)

    this.setReloAdcount()
    this.blockreload()

    this.activateactivityTracker()
    this.restactivitivitivitiveTire()
  },,

  beforedestroy(){
    this.deactivateactivityTracker()
    cleartimeout(this.useractivityTimeOut)
    eventbus。 $ off(my_event,this.handlemyevent)
  },,

  方法: {
    activateactivityTracker(){...},
    blockreload(){...},
    deactivateactivityTracker(){...},
    handlemyevent(){...},
    async loadLocaleasync(selectedlocale){...}
    redirectuser(){...}
    restactivityTimeOut(){...},
    seti18nlocale(locale){...},
    setReloadcount(){...},
    useractivityThrottler(){...},
  }
}
</script>
登入後複製

如您所見,每個選項都包含來自所有功能的零件。它們之間沒有明確的分離,並且使代碼難以閱讀,尤其是如果您不是寫它的人,而您是第一次看它。很難找到使用哪種功能的方法。

讓我們再次看一下,但將邏輯問題確定為評論。這些是:

  • 活動跟踪器
  • 重新加載阻滯劑
  • 認證檢查
  • 語言環境
  • 活動巴士註冊
  <div>
    ...
  </div>


<script>
導出默認{
  名稱:&#39;app&#39;,

  數據() {
    返回 {
      userActivityTime out:null,//活動跟踪器
      lastuseractivity:null,//活動跟踪器
      重新載體:0 //重新加載阻滯劑
    }
  },,

  計算:{
    Isauthentication(){...} //身份驗證檢查
    locale(){...} //語言環境
  },,

  手錶: {
    語言環境(value){...},
    ISAUTHENTICATIC(value){...} //身份驗證檢查
  },,

  異步創建(){
    const initiallocale = localstorage.getItem(&#39;locale&#39;)//
    等待this.loadlocaleasync(初始列表)//
  },,

  安裝(){
    eventbus。

    this.setReloAdcount()//重新加載阻滯劑
    this.blockreload()//重新加載阻滯劑

    this.activateactivityTracker()//活動跟踪器
    this.resetactivityTimeOut()//活動跟踪器
  },,

  beforedestroy(){
    this.deactivateactivityTracker()//活動跟踪器
    clearTimeOut(this.useractivity time out)//活動跟踪器
    eventbus。 $ off(my_event,this.handlemyevent)//事件總線註冊
  },,

  方法: {
    activateactivityTracker(){...},//活動跟踪器
    blockreload(){...},//重新加載阻止器
    deactivateactivityTracker(){...},//活動跟踪器
    handlemyevent(){...},//事件總線註冊
    異步LoadLocaleasync(SelectedLocale){...} // LOCALE
    redirectuser(){...} //身份驗證檢查
    restactivityTimeOut(){...},//活動跟踪器
    seti18nlocale(locale){...},//語言環境
    setReloAdcount(){...},//重新加載阻滯劑
    useractivityThrottler(){...},//活動跟踪器
  }
}
</script>
登入後複製

看到解開所有這些的困難是多麼困難? ?

現在,想像一下您需要更改一個功能(例如活動跟踪邏輯)。您不僅需要知道哪些元素與該邏輯有關,而且即使您知道,您仍然需要在不同的組件選項之間上下跳下。

讓我們使用構圖API通過邏輯問題分開代碼。為此,我們為與特定功能相關的每個邏輯創建一個單個函數。這就是我們所說的組成函數

 //活動跟踪邏輯
函數UseActivitivitivityTracker(){
  const userActivityTimeout = ref(null)
  const lastuseractivity = ref(null)

  函數activateactivityTracker(){...}
  函數deactivateactivityTracker(){...}
  函數repetActivityTimeOut(){...}
  功能useractivityThrottler(){...}

  onbeforemount(()=> {
    ActivateActivityTracker()
    restactivityTimeOut()
  }))

  onunmounted(()=> {
    停用vitivativitivityTracker()
    cleartimeout(userActivityTimeout.value)
  }))
}
登入後複製
 //重新加載阻止邏輯
功能UserEleloadblocker(上下文){
  const ReloadCount = Ref(null)

  功能BlockReLoad(){...}
  函數setReloadcount(){...}

  on mounted(()=> {
    setReloAdcount()
    Blockreload()
  }))
}
登入後複製
 //語言環境邏輯
功能USELOCALE(上下文){
  異步函數loadLocaleasync(SelectedLocale){...}
  函數seti18nlocale(locale){...}

  觀看(()=> {
    const locale = ...
    LoadLocaleasync(位置)
  }))

  //不需要“創建”鉤子,在設置功能中運行的所有邏輯都放在beforecreate和創建的鉤子之間
  const initiallocale = localstorage.getItem('locale')
  LOADLOCALEASYNC(初始列表)
}
登入後複製
 //活動巴士聽眾註冊
從“@/event-bus”導入eventbus

功能UseEventBuslistener(EventName,Handler){
  on mounted(()=> eventbus。
  onunmounted(()=> eventbus。$ off(eventname,handler))
}
登入後複製

如您所見,我們可以聲明反應性數據(參考 /反應性),計算道具,方法(普通功能),觀察者(手錶)和生命週期掛鉤(OnMounted / OnunMounted)。基本上,您通常在組件中使用的所有內容。

在保留代碼的位置時,我們有兩個選擇。我們可以將其放入組件中,或將其提取到單獨的文件中。由於構圖API尚未正式存在,因此沒有關於如何處理的最佳實踐或規則。我看到的方式,如果將邏輯緊密耦合到特定組件(即它不會在其他任何地方重複使用),並且沒有組件本身就無法生存,我建議將其留在組件中。另一方面,如果一般功能可能會重複使用,我建議將其提取到單獨的文件中。但是,如果我們想將其保存在單獨的文件中,我們需要記住將功能從文件導出並將其導入到我們的組件中。

這就是我們的組件看起來像使用新創建的構圖功能:

 
  <div>
      <!-- ... -->
  </div>


<script>
導出默認{
  名稱:&#39;app&#39;,

  設置(props,context){
    USEEVENTBUSLISTENER(my_event,handlemyevent)
    UseectivityTracker()
    UserEleloadblocker(上下文)
    USELOCALE(上下文)

    const iSauthenticated =計算((()=> ...)

    觀看(()=> {
      如果(!iSauthenticated){...}
    }))

    函數handlemyevent(){...},

    函數uselocale(){...}
    函數UseActivityTracker(){...}
    函數useeventbuslistener(){...}
    功能UserEleloadBlocker(){...}
  }
}
</script>
登入後複製

這為我們提供了每個邏輯問題的一個功能。如果我們想使用任何特定問題,我們需要在新設置功能中調用相關的構圖功能。

再次想像一下,您需要改變活動跟踪邏輯的一些更改。與該功能相關的所有內容都存在於UsictivityTracker功能中。現在,您立即知道在哪裡看,然後跳到正確的位置,查看所有相關的代碼。美麗的!

提取可重複使用的代碼

在我們的情況下,事件總線聽眾註冊看起來像是我們可以在任何傾聽事件總線上的事件的組件中使用的代碼。

如前所述,我們可以將邏輯與單獨文件中的特定功能相關。讓我們將活動總線偵聽器設置移至單獨的文件中。

 // composables/useeventBuslistener.js
從“@/event-bus”導入eventbus

導出函數useeventbuslistener(eventname,handler){
  on mounted(()=> eventbus。
  onunmounted(()=> eventbus。$ off(eventname,handler))
}
登入後複製

要在組件中使用它,我們需要確保我們導出我們的功能(命名或默認)並將其導入組件。

 
  <div>
    ...
  </div>


<script>
來自&#39;@/composables/useeventBuslistener&#39;的導入{useEventBusListener}

導出默認{
  名稱:“ myComponent”,

  設置(props,context){
    USEEVENTBUSLISTENER(my_event,myEventHandled)
    USEEVENTBUSLISTENER(另一_EVENT,緬甸人)
  }
}
</script>
登入後複製

就是這樣!現在,我們可以在所需的任何組件中使用它。

總結

關於構圖API的討論正在進行。這篇文章無意促進討論的任何方面。這更多的是顯示何時有用,在什麼情況下帶來額外的價值。

我認為在上面的現實生活示例上理解這個概念總是更容易的。有更多用例,您使用新的API越多,您將看到的模式就越多。這篇文章只是一些基本模式可以開始。

讓我們再次通過呈現的用例,看看構圖API在哪裡有用:

可以獨立生活的一般功能,而無需與任何特定組件結合

  • 與一個文件中的特定功能相關的所有邏輯
  • 將其保存在 @/composables/*。 js中並將其導入到組件中
  • 示例:活動跟踪器,重新加載阻滯劑和語言環境

可重複使用的功能,用於多個組件

  • 與一個文件中的特定功能相關的所有邏輯
  • 將其保留在 @/composables/*。 js中,並在組件中導入
  • 示例:事件總線聽眾註冊,窗口事件註冊,常見動畫邏輯,常見庫用法

組件中的代碼組織

  • 與一個功能中特定功能有關的所有邏輯
  • 將代碼保持在組件中的組成函數中
  • 與同一邏輯關注有關的代碼位於同一位置(即無需在數據,計算,方法,生命週期鉤等之間跳躍。)

請記住:這是一個正在進行的工作!

VUE組成API目前正在進行階段,並會遭受未來的變化。上面的示例中沒有任何提到的肯定,語法和用例都可能改變。它旨在使用VUE 3.0版運輸。同時,您可以查看View-use-web,以獲取構圖功能的集合,這些功能預計將包含在VUE 3中,但可以與VUE 2中的構圖API一起使用。

如果您想嘗試新的API,則可以使用 @vue/Coption庫。

以上是早期查看野外VUE 3組成的API的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1660
14
CakePHP 教程
1416
52
Laravel 教程
1311
25
PHP教程
1261
29
C# 教程
1234
24
Google字體可變字體 Google字體可變字體 Apr 09, 2025 am 10:42 AM

我看到Google字體推出了新設計(Tweet)。與上一次大型重新設計相比,這感覺更加迭代。我幾乎無法分辨出區別

如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 Apr 11, 2025 am 11:29 AM

您是否曾經在項目上需要一個倒計時計時器?對於這樣的東西,可以自然訪問插件,但實際上更多

HTML數據屬性指南 HTML數據屬性指南 Apr 11, 2025 am 11:50 AM

您想了解的有關HTML,CSS和JavaScript中數據屬性的所有信息。

使Sass更快的概念證明 使Sass更快的概念證明 Apr 16, 2025 am 10:38 AM

在一個新項目開始時,Sass彙編發生在眼睛的眨眼中。感覺很棒,尤其是當它與browsersync配對時,它重新加載

我們如何創建一個在SVG中生成格子呢模式的靜態站點 我們如何創建一個在SVG中生成格子呢模式的靜態站點 Apr 09, 2025 am 11:29 AM

格子呢是一塊圖案布,通常與蘇格蘭有關,尤其是他們時尚的蘇格蘭語。在Tar​​tanify.com上,我們收集了5,000多個格子呢

如何在WordPress主題中構建VUE組件 如何在WordPress主題中構建VUE組件 Apr 11, 2025 am 11:03 AM

內聯式模板指令使我們能夠將豐富的VUE組件構建為對現有WordPress標記的逐步增強。

php是A-OK用於模板 php是A-OK用於模板 Apr 11, 2025 am 11:04 AM

PHP模板通常會因促進Subpar代碼而變得不良說唱,但這並不是這樣的情況。讓我們看一下PHP項目如何執行基本的

編程SASS創建可訪問的顏色組合 編程SASS創建可訪問的顏色組合 Apr 09, 2025 am 11:30 AM

我們一直在尋求使網絡更容易訪問。顏色對比只是數學,因此Sass可以幫助涵蓋設計師可能錯過的邊緣案例。

See all articles