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 會快取並只在必要時重新計算 |
可讀性更高 | 直觀地表達「這是根據某些值動態計算出來的」變數 |