EP21 - 組件註冊

更新 發佈閱讀 1 分鐘
看完六個基礎範例之後,我打算繼續看一些Guide內容再繼續做Examples
Component Registration,開使要深入探討組件的內容摟!!!
有時候翻譯是組件或者元件~大家都記得英文是Component !!!

Vue 組件需要進行「註冊」,以便在模板中遇到組件時,Vue 知道在哪裡找到其實現。註冊組件有兩種方式:全局註冊和局部註冊。

全局註冊 - Global Registration​

可以使用 .component() 方法在當前的 Vue 應用程式中全局註冊組件,使其可用:

import { createApp } from 'vue'

const app = createApp({})

app.component(
// 註冊的名稱
'MyComponent',
// 組件實現
{
/* ... */
}
)

如果使用單文件組件(SFCs),你將會註冊導入的 .vue 文件:

import MyComponent from './App.vue'

app.component('MyComponent', MyComponent)

.component() 方法可以進行鏈式調用:

app
.component('ComponentA', ComponentA)
.component('ComponentB', ComponentB)
.component('ComponentC', ComponentC)

全局註冊的組件可以在此應用程式中的任何組件模板中使用:

<template>
<!-- 這可以在應用程式內的任何組件中工作 -->
<ComponentA/>
<ComponentB/>
<ComponentC/>
</template>

這甚至適用於所有子組件,意味著這三個組件也可以在彼此內部使用。

局部註冊 - Local Registration​

雖然全局註冊很方便,但也有一些缺點:

全局註冊會阻止構建系統移除未使用的組件(即 "tree-shaking")。如果你全局註冊了一個組件但在應用中未使用,它仍會包含在最終的包中。

全局註冊使大型應用中的依賴關係不夠明確。它使得從使用該組件的父組件中定位子組件的實現變得困難。這會影響長期的可維護性,類似於使用太多全局變量。

局部註冊將註冊組件的可用性僅限於當前組件。這使得依賴關係更加明確,而且更有利於 tree-shaking

在使用 <script setup> 的單文件組件(SFC)中,導入的組件可以在本地使用而不需要註冊:

<script setup>
import ComponentA from './ComponentA.vue'
</script>

<template>
<ComponentA />
</template>

在非 <script setup> 中,你需要使用 components 選項:

import ComponentA from './ComponentA.js'

export default {
components: {
ComponentA
},
setup() {
// ...
}
}

對於 components 對象中的每個屬性,鍵將是組件的註冊名稱,而值將包含組件的實現。上述示例使用的是 ES2015 屬性簡寫,等同於:

export default {
components: {
ComponentA: ComponentA
}
// ...
}

請注意,本地註冊的組件在後代組件中不可用。在這種情況下,ComponentA 只會在當前組件中可用,而不是其任何子組件或後代組件中。

組件名稱大小寫 - Component Name Casing​

在整個指南中,我們使用 PascalCase 名稱來註冊組件。原因如下:

  1. PascalCase 名稱是有效的 JavaScript 標識符。這使得在 JavaScript 中導入和註冊組件變得更容易,也有助於 IDE 的自動完成功能。
  2. <PascalCase /> 使得在模板中這是一個 Vue 組件而不是原生 HTML 元素更加明顯。它還區分了 Vue 組件和自定義元素(網頁組件)。

這是使用 SFC 或字符串模板時推薦的樣式。然而,如在 DOM 模板解析注意事項中所討論的,PascalCase 標籤在 DOM 模板中不可用。

幸運的是,Vue 支援將 kebab-case 標籤解析為使用 PascalCase 註冊的組件。這意味著註冊為 MyComponent 的組件可以在模板中通過 <MyComponent><my-component> 引用。這允許我們無論模板來源如何,都可以使用相同的 JavaScript 組件註冊代碼。

介紹了全局註冊跟局部註冊,回想起前幾天學的範例,都是使用局部註冊呢!
什麼時候才會用到全局註冊呢?什麼時候適合局部註冊?

組件註冊情境

在 Vue 中,全局註冊和局部註冊各有其適用的情境。下面是一些適合使用全局註冊和局部註冊的情況。

全局註冊

會使組件在整個應用中都可用。這種方式適合於那些在多個地方頻繁使用的組件,例如:

  1. 通用組件
    • 像是按鈕、表單輸入框、模態框等,在整個應用中多處使用的通用組件非常適合全局註冊。
    • 例如,設計一個應用內部統一風格的按鈕組件,這樣就可以在任何地方使用 <MyButton />,而不需要每次都進行局部註冊。
  2. 插件組件
    • 一些 Vue 插件提供的組件通常會全局註冊,例如 Vue Router 的 <router-link><router-view> 組件。
    • 這樣可以保證在整個應用中隨時使用這些組件。
  3. 非常頻繁使用
    • 當一個組件在應用的多個地方都需要使用時,全局註冊可以避免重複的局部註冊代碼。

局部註冊

將組件的作用範圍限制在當前組件內,這種方式適合於那些特定上下文中使用的組件,例如:

  1. 特定功能的組件
    • 某些組件只在特定頁面或功能中使用,這種情況下使用局部註冊會更合適,這樣可以明確其依賴關係。
    • 例如,在一個特定的表單頁面中使用的日期選擇器組件,不需要全局註冊,僅在這個表單頁面內部註冊即可。
  2. 提高可維護性
    • 局部註冊可以使代碼更易於理解和維護,因為依賴關係在組件內部更明確。
    • 例如,在大型應用中,如果每個頁面或功能模塊內部都局部註冊所需的組件,那麼修改和調試時就可以更方便地追溯每個組件的來源。
  3. 避免命名衝突
    • 當應用中有多個開發者合作時,局部註冊可以避免全局命名空間的污染和命名衝突。


留言
avatar-img
留言分享你的想法!
avatar-img
卡關的人生
2會員
73內容數
分享生活趣事~
卡關的人生的其他內容
2024/11/10
Vue 提供了多種動畫技術來提升應用程式的互動性,包括基於 CSS 類別的動畫、基於狀態的動畫,以及使用監視器來動畫化數值。基於類別的動畫可通過動態添加 CSS 類別來觸發,像是觸發按鈕搖動效果。基於狀態的動畫則是透過樣式綁定,根據互動動態調整元素的外觀,例如根據滑鼠位置改變背景顏色。
Thumbnail
2024/11/10
Vue 提供了多種動畫技術來提升應用程式的互動性,包括基於 CSS 類別的動畫、基於狀態的動畫,以及使用監視器來動畫化數值。基於類別的動畫可通過動態添加 CSS 類別來觸發,像是觸發按鈕搖動效果。基於狀態的動畫則是透過樣式綁定,根據互動動態調整元素的外觀,例如根據滑鼠位置改變背景顏色。
Thumbnail
2024/11/09
Web Components 是一組網頁原生 API,允許開發者創建可重複使用的自訂元素。Vue 與 Web Components 是互補的技術,Vue 支援整合和創建自訂元素。
Thumbnail
2024/11/09
Web Components 是一組網頁原生 API,允許開發者創建可重複使用的自訂元素。Vue 與 Web Components 是互補的技術,Vue 支援整合和創建自訂元素。
Thumbnail
2024/11/08
Vue 建議使用模板構建應用程式,但在需要 JavaScript 的全程式化功能時,渲染函數可派上用場。渲染函數通過 h() 函數創建 vnode,h 是 hyperscript 的簡寫,能生成 HTML 的 JavaScript。
Thumbnail
2024/11/08
Vue 建議使用模板構建應用程式,但在需要 JavaScript 的全程式化功能時,渲染函數可派上用場。渲染函數通過 h() 函數創建 vnode,h 是 hyperscript 的簡寫,能生成 HTML 的 JavaScript。
Thumbnail
看更多
你可能也想看
Thumbnail
蝦皮分潤計畫讓我在分享旅遊文章時,也能透過推薦好物累積被動收入,貼補旅行基金。這篇文章,除了介紹計畫的操作亮點與心得,也分享我最常應用的案例:「旅行必備小物 TOP5」,包含行李鎖、免洗內衣褲、分裝瓶、折疊衣架與真空壓縮袋,幫助出國打包更輕鬆。想同時記錄旅行、分享好物又創造額外收入的你,千萬別錯過!
Thumbnail
蝦皮分潤計畫讓我在分享旅遊文章時,也能透過推薦好物累積被動收入,貼補旅行基金。這篇文章,除了介紹計畫的操作亮點與心得,也分享我最常應用的案例:「旅行必備小物 TOP5」,包含行李鎖、免洗內衣褲、分裝瓶、折疊衣架與真空壓縮袋,幫助出國打包更輕鬆。想同時記錄旅行、分享好物又創造額外收入的你,千萬別錯過!
Thumbnail
想增加被動收入?加入蝦皮分潤計畫是輕鬆上手的好方法!本文提供完整教學,包含申請流程、賺取分潤技巧,以及實際使用心得分享,助你輕鬆獲得額外收入。
Thumbnail
想增加被動收入?加入蝦皮分潤計畫是輕鬆上手的好方法!本文提供完整教學,包含申請流程、賺取分潤技巧,以及實際使用心得分享,助你輕鬆獲得額外收入。
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
平常我們在 html 上常看到的例如 v-for、v-model 等等... 也是VUE已經幫我們定義好的指令,而這次我們可以依這自己的需求來建立。 此功能屬於較進階的功能,因此實戰中會比較少見,市面上還是有不少完善的套件能達到同樣效果,建議可以先往這方面察找
Thumbnail
平常我們在 html 上常看到的例如 v-for、v-model 等等... 也是VUE已經幫我們定義好的指令,而這次我們可以依這自己的需求來建立。 此功能屬於較進階的功能,因此實戰中會比較少見,市面上還是有不少完善的套件能達到同樣效果,建議可以先往這方面察找
Thumbnail
我們在實作中,難免會遇到在不同組件中,卻有需求相同的資料格式,因此 mixins 可以達到我們的需求,除了 data 以外也包含了 methods 可以共用,舉例來說,學生資料可能會在,班級跟社團內被使用,當我們要撰寫元件時,就可以省略多餘的 data 定義。
Thumbnail
我們在實作中,難免會遇到在不同組件中,卻有需求相同的資料格式,因此 mixins 可以達到我們的需求,除了 data 以外也包含了 methods 可以共用,舉例來說,學生資料可能會在,班級跟社團內被使用,當我們要撰寫元件時,就可以省略多餘的 data 定義。
Thumbnail
自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
Thumbnail
自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
Thumbnail
Vue.js是一種基於MVVM的前端JavaScript框架,類似的框架有React、Angular等。 架設環境 安裝Visual Studio Code(https://code.visualstudio.com/) 安裝Node.js(https://nodejs.org/en/
Thumbnail
Vue.js是一種基於MVVM的前端JavaScript框架,類似的框架有React、Angular等。 架設環境 安裝Visual Studio Code(https://code.visualstudio.com/) 安裝Node.js(https://nodejs.org/en/
Thumbnail
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
Thumbnail
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
Thumbnail
Vue Router 及 具名視圖,擺脫以往切換依賴 CSS display:none 跟 display:block 互相配合,有時還得搭配 z-index 來調整層級跟 opacity 透明度的麻煩,而 Vue Router 完美的解決了這棘手的問題,且能客製頁面想要呈現的擺飾。
Thumbnail
Vue Router 及 具名視圖,擺脫以往切換依賴 CSS display:none 跟 display:block 互相配合,有時還得搭配 z-index 來調整層級跟 opacity 透明度的麻煩,而 Vue Router 完美的解決了這棘手的問題,且能客製頁面想要呈現的擺飾。
Thumbnail
這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot Props 進階應用 ,其中包含單筆資料、多筆資料。
Thumbnail
這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot Props 進階應用 ,其中包含單筆資料、多筆資料。
Thumbnail
這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot插槽 ,其中包含默認、具名、語法糖。
Thumbnail
這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot插槽 ,其中包含默認、具名、語法糖。
Thumbnail
前言 Vue 是一個現代開發框架,擁有完尚的生態系,讓我們可以將須多元件客製化,做出組件,並且可重複利用,高擴充性。在開發組件時,每個組件都擁有自己的生命周期,Vue 組件會偵測每個變數值,是否有變,並且更新內容,今天要一個一個了解 Vue 的生命週期,讓大家有更多認識。 Vue 的生命週期
Thumbnail
前言 Vue 是一個現代開發框架,擁有完尚的生態系,讓我們可以將須多元件客製化,做出組件,並且可重複利用,高擴充性。在開發組件時,每個組件都擁有自己的生命周期,Vue 組件會偵測每個變數值,是否有變,並且更新內容,今天要一個一個了解 Vue 的生命週期,讓大家有更多認識。 Vue 的生命週期
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News