Vue 3 基礎

computed 和 methods 的差異?

AI 練習作答

核心差異:快取(Caching)

computed 有快取機制,只有當它的響應式依賴發生變化時才重新計算。
methods 每次呼叫都會重新執行,沒有快取。

範例

import { ref, computed } from 'vue'

const count = ref(0)

// computed:有快取,count 不變時不重新計算
const doubled = computed(() => {
  console.log('computed 執行')
  return count.value * 2
})

// methods:每次呼叫都執行
function getDoubled() {
  console.log('method 執行')
  return count.value * 2
}
<template>
  <!-- 渲染 3 次 doubled,但 computed 只執行 1 次 -->
  <p>{{ doubled }}</p>
  <p>{{ doubled }}</p>
  <p>{{ doubled }}</p>

  <!-- 呼叫 3 次,執行 3 次 -->
  <p>{{ getDoubled() }}</p>
  <p>{{ getDoubled() }}</p>
  <p>{{ getDoubled() }}</p>
</template>

比較表

特性 computed methods
快取 ✅ 有(依賴不變則不重算) ❌ 無
使用方式 像屬性一樣存取(不加 () 需要加 () 呼叫
接受參數 ❌ 不能 ✅ 可以
適合場景 從現有資料派生出新資料 處理事件、有副作用的操作
回傳值 必須有 可有可無

何時使用 computed?

// ✅ 從現有資料計算出新值
const fullName = computed(() => firstName.value + ' ' + lastName.value)

// ✅ 過濾清單
const activeUsers = computed(() => users.value.filter(u => u.active))

// ✅ 格式化資料
const formattedPrice = computed(() => '$' + price.value.toFixed(2))

何時使用 methods?

// ✅ 事件處理
function handleClick() { /* ... */ }

// ✅ 有副作用(API 請求、修改資料)
async function fetchData() { /* ... */ }

// ✅ 需要傳參數
function formatDate(date) { /* ... */ }

✦ AI 模擬面試

輸入你的答案,AI 即時分析精準度與改進空間

登入後即可使用 AI 評分