[ Vue 入門 ] 01:宣告式渲染、響應式系統與 SFC

zxlee-avatar-img
發佈於Vue
更新 發佈閱讀 7 分鐘

Vue 是一個建立在 HTML、CSS 及 JavaScript 上,用來建立使用者介面的前端框架。它的設計理念強調「漸進式」與「可組合性」,讓開發者能根據專案規模與需求,逐步擴充功能。

與 React 相比,Vue 採用基於標準 HTML 延伸的模板語法,在結構與表達方式上較貼近傳統前端開發習慣。對於剛接觸前端框架的人而言,個人認為這種設計是較容易理解與上手的。

這篇文章將主要從官方文件這篇介紹的翻譯與改寫著手,並穿插一些與 React 比較後,個人小小的、可能有億點點主觀的感想。

Vue 的核心特色:

一、宣告式渲染 (Declarative Rendering)

Vue 延伸標準 HTML 的 <template> 語法,讓我們能夠根據 JavaScript 的狀態,描述畫面應該呈現的結果。

與原生 JS 告訴瀏覽器「如何操作 DOM」的做法不同,我們描述的是:

當資料的狀態是什麼時,畫面應該長怎麼樣子。

二、響應式系統 (Reactivity)

Vue 內建能夠響應資料變化的系統,會追蹤資料的狀態,當狀態變化時,自動觸發對應的畫面更新。

這意味著我們不需要手動查找 DOM 元素跟同步狀態,只需要專注於資料本身的變化。Vue 會負責將變化反應到畫面上。

💡 如果學過 React,應該會對這兩個特色不陌生。
兩個框架都以「資料驅動畫面」作為核心設計理念,不過實作方式略有不同:

React 使用 JSX,將 UI 作為 JavaScript 表達式的一部分;
Vue 則透過 template 語法,將結構與邏輯分開描述。

漸進式框架 (Progressive Framework)

因應前端網頁多元的需求與規模,可以根據專案需求與規模,逐步引入不同層級的功能。

這點其實跟 React 也蠻相似。不過差別在於, React 核心專注 UI 渲染,其他功能多仰賴社群生態系組合;而 Vue 官方則提供一套整合過的解決方案,比如說,

  • 路由系統:可用官方的 Vue Router
  • 狀態管理工具:由於經過官方推薦,Pinia 通常是首選

這種官方整合方式,能夠減少在學習與選型成本,對於規模會逐漸擴大的專案,也更容易維持一致性。

單一檔案元件 (Single File Component, SFC)

Vue 提供一種特殊的元件格式,名為「單一檔案元件」(SFC),副檔名為 .vue。這是一種類似 HTML 風格的檔案,同時封裝了結構、邏輯與樣式:

  1. JavaScript:寫於 <script> 標籤中
  2. HTML:寫於 <template> 標籤中
  3. CSS:寫於 <style> 標籤中
<script>
// JavaScript
</script>

<template>
<!-- HTML -->
</template>

<style scoped>
/* CSS(僅作用於此元件) */
</style>

其中 scoped 代表樣式僅作用於該元件。Vue 會在編譯階段自動為元素加入對應的屬性,實現樣式隔離,避免不同元件之間互相污染。

兩種 API 風格

Vue 提供兩種主要撰寫元件邏輯的方式:Options API 與 Composition API。

一、Options API

透過物件不同屬性來定義元件邏輯,例如 datamethodsmounted 等。

<script>
export default {
data() {
return {
count: 0
}
},

methods: {
increment() {
this.count++
}
},

mounted() {
console.log(`The initial count is ${this.count}.`)
}
}
</script>

這種寫法以「元件實例(component instance)」為核心,透過 this 存取資料與方法,心智模型接近物件導向或類別的概念。

優點是結構清楚、上手容易;缺點則是在元件邏輯變得複雜時,相關邏輯可能分散在不同選項中,不利於重構與抽離。

二、Composition API

Composition API 則改以函式為核心,透過從 Vue 匯入的 API 來定義響應式資料與生命週期。定義時,會在 <script> 標籤上放上 setup 屬性。

<script setup> 
import { ref, onMounted } from 'vue'

const count = ref(0)

function increment() {
count.value++
}

onMounted(() => {
console.log(`The initial count is ${count.value}.`)
})
</script>

此 API 不再依賴 this,專注於宣告讓畫面響應的資料狀態,並將相關邏輯抽離成可重用的函式。

小結

  • Vue 的核心特色:以宣告式方式描述 UI;以響應式系統更新畫面
  • 提供漸進式的架構設計
  • 單一元件檔案的設計
  • 提供兩種特色的 API 寫法:Options API、Composition API
  • Options API 偏向物件導向
  • Composition API 以狀態為核心組織邏輯

由於 Composition API 的概念更接近 React 的思維模式,此系列的後續文章將以此寫法為主。

參考資料

Vue 入門系列文章

  1. [ Vue 入門 ] 01:宣告式渲染、響應式系統與 SFC
  2. [ Vue 入門 ] 02 - 從原生 HTML 到 CDN 應用,打造 Vue 動態介面
留言
avatar-img
肝 code 人生
1會員
8內容數
2024 年 7 月開始的「肝 code 人生」,2025 年 1 月撰寫第一篇程式筆記
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
為什麼 JavaScript 中的字串無法修改?為什麼複製變數後,改變其中一個會影響另一個?本文將深入解析 JavaScript 的原生值 (primitive values) 與物件 (objects) 的運作機制,說明傳值與傳參考的差異,避免非預期的程式行為,提升開發效率!!
Thumbnail
為什麼 JavaScript 中的字串無法修改?為什麼複製變數後,改變其中一個會影響另一個?本文將深入解析 JavaScript 的原生值 (primitive values) 與物件 (objects) 的運作機制,說明傳值與傳參考的差異,避免非預期的程式行為,提升開發效率!!
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
Thumbnail
作為一個非常不專業的前端初學者,有陣子常常卡在公司官網,要插入 Youtube 影片無法RWD(響應式)的問題。 跟不熟悉 網頁技術的朋友們介紹,RWD 就是指網頁的排版能跟著螢幕的大小縮放、變化編排,在這個人手一機的時代,特別重要。
Thumbnail
作為一個非常不專業的前端初學者,有陣子常常卡在公司官網,要插入 Youtube 影片無法RWD(響應式)的問題。 跟不熟悉 網頁技術的朋友們介紹,RWD 就是指網頁的排版能跟著螢幕的大小縮放、變化編排,在這個人手一機的時代,特別重要。
Thumbnail
這篇文章分享了申請 AppWorks School 轉職培訓的過程,包括背景及源起、報名前準備、報名及面談、總結等內容,並提供了未來申請者的建議。如果你正在尋求轉職機會,這篇文章可能對你有所幫助。
Thumbnail
這篇文章分享了申請 AppWorks School 轉職培訓的過程,包括背景及源起、報名前準備、報名及面談、總結等內容,並提供了未來申請者的建議。如果你正在尋求轉職機會,這篇文章可能對你有所幫助。
Thumbnail
data-* attributes 是 HTML 內建的屬性,可將網頁的狀態與元素進行綁定。而Tailwind CSS 在 3.2 版更新中推出使用 data-* attributes 自訂樣式的功能,讓樣式設定可以更動態多變。
Thumbnail
data-* attributes 是 HTML 內建的屬性,可將網頁的狀態與元素進行綁定。而Tailwind CSS 在 3.2 版更新中推出使用 data-* attributes 自訂樣式的功能,讓樣式設定可以更動態多變。
Thumbnail
在剛開始寫 JavaScript 可能大多數的人不會特別意識到 JavaScript 的型別系統有什麼特別之處,我是在看完 Youtube 上 CS50 的課程,才理解到在不同的程式語言中,會因為語言的特性而有不同的系統,JavaScript 就是偏向比較特別的那一種。
Thumbnail
在剛開始寫 JavaScript 可能大多數的人不會特別意識到 JavaScript 的型別系統有什麼特別之處,我是在看完 Youtube 上 CS50 的課程,才理解到在不同的程式語言中,會因為語言的特性而有不同的系統,JavaScript 就是偏向比較特別的那一種。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News