2025-03-26- VUE響應式變化
2025-03-26- VUE響應式變化
這是一個非常棒的問題,而且說明你已經在思考 Vue 中「響應式變化」與效能優化的核心概念了!
✅ 為什麼接收一組 style 要用 computed()?
答案是:讓這組 style 自動「響應變化」並有效率地重新渲染 DOM。
🌟 我們來看一個基本寫法
1 | const badgeStyle = { |
這樣寫也「可以」工作,但有一個問題:
- 這是一個靜態物件(plain object),只在 setup 時執行一次。
- 如果 props 改變了,這個物件 不會更新。
✅ 用 computed() 包起來的好處
1 | const badgeStyle = computed(() => ({ |
這樣一來:
- 如果
props.color或props.textColor改變了, badgeStyle會自動 重新計算,- 並觸發 DOM 的 style 響應式更新。
這正是 Vue 的反應式核心!
🧠 簡單比喻
| 做法 | 類似行為 |
|---|---|
const obj = {...} |
拍一張靜態照片,不會變 |
const obj = computed(() => {...}) |
裝一台即時監視器,只要變動就會更新 |
🎯 實務重點:computed vs ref vs reactive
- ✅
computed():當你想要根據變數動態產生新值時使用(常用於style,class,總價,折扣後價格)。 - ✅
ref():單一變數(例如const count = ref(0)) - ✅
reactive():多個變數組成的物件(例如表單資料)
🔍 延伸:如果你不想用 computed() 呢?
可以用 watch(),但寫法更長,而且不建議這樣做:
1 | const badgeStyle = ref({}) |
是不是覺得 computed() 簡潔多了!
✅ 結論
使用 computed() 的主要目的:
| 原因 | 解釋 |
|---|---|
| 響應式更新 | props 改變時,style 自動更新 |
| 更佳效能 | Vue 會快取並只在必要時重新計算 |
| 可讀性更高 | 直觀地表達「這是根據某些值動態計算出來的」變數 |