EP45 - 單檔組件

更新 發佈閱讀 6 分鐘
Single-File Components,接下來六篇是要講解Scaling Up的東西
Scaling Up意思應該是擴大規模、增加規模,
意思應該是要更加解釋組件吧?繼續來看下去

介紹 - Introduction

Vue 單文件元件(也稱為 *.vue 文件,簡稱 SFC)是一種特殊的文件格式,允許我們將 Vue 元件的模板、邏輯和樣式封裝在一個文件中。以下是一個 SFC 的範例:

<script setup>
import { ref } from 'vue'
const greeting = ref('Hello World!')
</script>

<template>
<p class="greeting">{{ greeting }}</p>
</template>

<style>
.greeting {
color: red;
font-weight: bold;
}
</style>

如我們所見,Vue SFC 是 HTML、CSS 和 JavaScript 經典三重奏的自然延伸。<template>、<script> 和 <style> 區塊將元件的視圖、邏輯和樣式封裝並放置在同一文件中。完整的語法在 SFC 語法規範中定義。

為什麼使用 SFC - Why SFC​

雖然 SFC 需要建置步驟,但它帶來了許多好處:

SFC 是 Vue 作為框架的一個定義特性,並且是以下情況下使用 Vue 的推薦方法:

  • 單頁應用程式(SPA)
  • 靜態網站生成(SSG)
  • 任何需要建置步驟以提升開發體驗(DX)的非簡單前端專案

話雖如此,我們也意識到有些情況下使用 SFC 可能顯得過於繁瑣。這就是為什麼 Vue 仍然可以通過純 JavaScript 使用,而無需建置步驟。如果你只是想為主要是靜態的 HTML 增強一些輕量級的互動,可以查看 petite-vue,這是一個優化為漸進增強的 6 kB 的 Vue 子集。

運作方式 - How It Works

Vue SFC 是一種框架特定的文件格式,必須由 @vue/compiler-sfc 預編譯為標準 JavaScript 和 CSS。編譯後的 SFC 是一個標準的 JavaScript (ES) 模組,這意味著在適當的建置設定下,你可以像匯入模組一樣匯入 SFC:

import MyComponent from './MyComponent.vue'

export default {
components: {
MyComponent
}
}

SFC 內的 <style> 標籤在開發過程中通常會被注入為原生的 <style> 標籤,以支援熱更新。對於生產環境,它們可以被提取並合併為一個單一的 CSS 文件。

你可以在 Vue SFC Playground 上嘗試 SFC,並探索它們的編譯過程。

在實際專案中,我們通常將 SFC 編譯器與建置工具(如 Vite 或基於 webpackVue CLI)集成。Vue 提供了官方的鷹架工具,讓你能夠最快速地開始使用 SFC。更多詳情請查看 SFC 工具部分。

關於關注點分離? - What About Separation of Concerns?​

一些來自傳統網頁開發背景的使用者可能會擔心,SFC 將不同的關注點混合在同一個地方,而 HTML/CSS/JS 本應該是分離的!

要回答這個問題,重要的是我們需要同意關注點分離並不等同於文件類型的分離。工程原則的最終目標是提高代碼庫的可維護性。在當前越來越複雜的前端應用中,關注點分離如果僅僅是基於文件類型的分離,並不能幫助我們達到這個目標。

在現代 UI 開發中,我們發現,與其將代碼庫分為三個相互交織的巨大層次,將它們分成鬆散耦合的組件並進行組合更有意義。在一個組件內,它的模板、邏輯和樣式是內在耦合的,將它們放在一起實際上使組件更加內聚和可維護。

即使你不喜歡單文件組件的概念,你仍然可以通過使用 Src Imports 將 JavaScript 和 CSS 分離到不同的文件中,利用其熱加載和預編譯功能。

看完這篇覺得還有蠻多要學習的www
Vite, Vue CLI這兩個工具應該是很實用的!!!
  • Vite:是一個現代前端建置工具,專為提升開發速度和效率而設計。它支援熱模組替換(HMR, Hot Module Replacement),讓開發者在編輯代碼時立即看到變更結果。
  • Vue CLI:Vue CLI 是基於 webpack 的 Vue.js 專案腳手架工具,它提供了一個完整的開發環境和建置設置,方便開發者快速啟動和管理 Vue.js 專案。









留言
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
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
Vue 筆記,Nuxt 簡介
Thumbnail
Vue 筆記,Nuxt 簡介
Thumbnail
Vue3 筆記,指令進階篇
Thumbnail
Vue3 筆記,指令進階篇
Thumbnail
Vue3 學習筆記,元件與資料傳遞篇
Thumbnail
Vue3 學習筆記,元件與資料傳遞篇
Thumbnail
Vue3 學習筆記,專案建立與基礎響應式篇
Thumbnail
Vue3 學習筆記,專案建立與基礎響應式篇
Thumbnail
1. 安裝node.js 2. 建立專案: 接著會詢問一些初始化設定的東西,按照需求選擇即可: 3. 執行 打開http://localhost:3000/ 即可看到畫面。 pages Nuxt.js會自動配置pages中每一個.vue檔案的route。 假設在pages資料夾下新增一個如下內容的a
Thumbnail
1. 安裝node.js 2. 建立專案: 接著會詢問一些初始化設定的東西,按照需求選擇即可: 3. 執行 打開http://localhost:3000/ 即可看到畫面。 pages Nuxt.js會自動配置pages中每一個.vue檔案的route。 假設在pages資料夾下新增一個如下內容的a
Thumbnail
在寫頁面之前,先來介紹 Vue 頁面結構。 首先先在 src/components 底下建立一個 home.vue 跟寫一個 html 頁面很像,一樣是分成 寫網頁內容、script、style,三個部分,只是 html 標籤換成了 template。 template 就是相當於原生 html 檔
Thumbnail
在寫頁面之前,先來介紹 Vue 頁面結構。 首先先在 src/components 底下建立一個 home.vue 跟寫一個 html 頁面很像,一樣是分成 寫網頁內容、script、style,三個部分,只是 html 標籤換成了 template。 template 就是相當於原生 html 檔
Thumbnail
專案建好了,那先來講 Vue 的專案架構 詳細內容很多,所以我挑重點講 public index.html public/index.html 是 Vue 頁面的 entry point,進入一個 Vue 頁面會先進 public/index.html,再套用 App.vue,最後才是進入你寫的 .
Thumbnail
專案建好了,那先來講 Vue 的專案架構 詳細內容很多,所以我挑重點講 public index.html public/index.html 是 Vue 頁面的 entry point,進入一個 Vue 頁面會先進 public/index.html,再套用 App.vue,最後才是進入你寫的 .
Thumbnail
前言 Vue 在過去的一兩年內快速發展,寫法也一直改變,我在過去一年多也更改了兩次寫法,在這個系列中我將以最新的 composition api + typescript 寫法進行教學。 javascript 有兩大痛點,一個是異步問題,另一個是弱型別。要渲染畫面一定要多線程同時異步處理,不然真的一
Thumbnail
前言 Vue 在過去的一兩年內快速發展,寫法也一直改變,我在過去一年多也更改了兩次寫法,在這個系列中我將以最新的 composition api + typescript 寫法進行教學。 javascript 有兩大痛點,一個是異步問題,另一個是弱型別。要渲染畫面一定要多線程同時異步處理,不然真的一
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News