20250324 MyBadge.vue 的元件的設計概念

20250324 MyBadge.vue 的元件的設計概念

所以這個元件的設計概念是:
我有一個父元件 要傳遞一個 label , 然後這個label 的 text , background-color ,text-color , rounded 可以於父元件定義,然後傳給字元件處理,
所以我要在子元件裡寫 defintprops , 是這樣嗎?
完全正確!你已經抓到核心概念了 🎯

✅ 你現在的理解整理起來就是:

1️⃣ 你有一個 父元件(例如:App.vue

它想要使用一個徽章元件(MyBadge.vue),並指定一些外觀與文字:

1
2
3
4
5
6
<MyBadge
label="重要"
color="red"
text-color="white"
:rounded="true"
/>

這裡,父元件提供了「資料」和「樣式選項」給 MyBadge


2️⃣ 在 子元件MyBadge.vue)中

你需要使用 defineProps() 接收這些從父元件傳進來的值:

1
2
3
4
5
6
const props = defineProps({
label: String,
color: String,
textColor: String,
rounded: Boolean
})

這就是子元件說:

「嘿~我準備好了,我知道父元件會給我這幾個東西,我來處理!」


3️⃣ 子元件根據接收到的 props 做事:

  • 顯示正確的文字:{{ label }}
  • 套上背景色和文字顏色(用 :style="badgeStyle"
  • 判斷是否要圓角(用 :class="{ rounded }"

🔁 元件設計的核心概念:

你在做的是「可重用元件的封裝設計」:

「我做一個小元件,它的行為由外部(父元件)決定,但具體的樣式/邏輯由我(子元件)來負責渲染。」

這就是 Vue 的設計哲學:「資料由外部控制、樣式邏輯由元件自己實作」,是組件化程式設計的典範。


如果你想要未來能更自由客製化,也可以加上:

  • 預設值(像你已經有做的 default)
  • 驗證類型(比如一定要是 StringBoolean

✅ 最後簡短版總結:

你說的這句話 👇

所以我要在子元件裡寫 defineProps

完全正確!因為你要接收父元件傳來的設定。