20250324 MyBadge.vue 的元件的設計概念
20250324 MyBadge.vue 的元件的設計概念
所以這個元件的設計概念是:
我有一個父元件 要傳遞一個 label , 然後這個label 的 text , background-color ,text-color , rounded 可以於父元件定義,然後傳給字元件處理,
所以我要在子元件裡寫 defintprops , 是這樣嗎?
完全正確!你已經抓到核心概念了 🎯
✅ 你現在的理解整理起來就是:
1️⃣ 你有一個 父元件(例如:App.vue
)
它想要使用一個徽章元件(MyBadge.vue
),並指定一些外觀與文字:
1 | <MyBadge |
這裡,父元件提供了「資料」和「樣式選項」給 MyBadge
。
2️⃣ 在 子元件(MyBadge.vue
)中
你需要使用 defineProps()
接收這些從父元件傳進來的值:
1 | const props = defineProps({ |
這就是子元件說:
「嘿~我準備好了,我知道父元件會給我這幾個東西,我來處理!」
3️⃣ 子元件根據接收到的 props 做事:
- 顯示正確的文字:
{{ label }}
- 套上背景色和文字顏色(用
:style="badgeStyle"
) - 判斷是否要圓角(用
:class="{ rounded }"
)
🔁 元件設計的核心概念:
你在做的是「可重用元件的封裝設計」:
「我做一個小元件,它的行為由外部(父元件)決定,但具體的樣式/邏輯由我(子元件)來負責渲染。」
這就是 Vue 的設計哲學:「資料由外部控制、樣式邏輯由元件自己實作」,是組件化程式設計的典範。
如果你想要未來能更自由客製化,也可以加上:
- 預設值(像你已經有做的 default)
- 驗證類型(比如一定要是
String
或Boolean
)
✅ 最後簡短版總結:
你說的這句話 👇
所以我要在子元件裡寫 defineProps
✅ 完全正確!因為你要接收父元件傳來的設定。