Vue computed 怎麼用:讓購物小計跟著數量更新

商品數量改了,小計卻還停在舊數字,通常是把「可算出來的資料」也存成另一份狀態。Vue 的 computed 適合處理這種衍生值:保留單價與數量,讓小計跟著它們變化。

小計不用另外存一份

以下寫法以已建立的Vue 3專案為前提:第一段放在單檔元件的 <script setup>,輸入與顯示片段放在同一元件的 <template>。它不是貼進普通HTML就能執行的完整頁面。

用一件單價150元的示例商品,數量從2改成5,小計就應從300變成750。只保留數量這個可變來源,會比每次同時修改「數量」和「小計」更不容易漏更新。

import { ref, computed } from 'vue';
const price = 150;
const quantity = ref(2);
const subtotal = computed(() => price * quantity.value);

在JavaScript中把 quantity.value 改成5,subtotal.value 就會得到750;這是讀值示例,不必在初始化時另寫賦值把數量強制改成5。

在 JavaScript 裡讀取 ref 與 computed 用 .value;模板會自動解包,因此可以寫 {{ subtotal }}。這裡的150元只是計算例子,不是本站商品價格。

Vue 購物小計範例:數量5、單價150元,小計750元
單價150元、數量5,小計自動更新為750元;這個例子只做前端計算。

模板顯示結果,輸入先轉成數字

<label>數量
  <input type="number" min="0" step="1"
    :value="quantity"
    @input="quantity = Math.max(0, Number($event.target.value) || 0)">
</label>
<p>小計:{{ subtotal }} 元</p>

這個簡單演示把空白或無效數字轉成0,並避免負數。正式購物流程還要處理整數數量、庫存、價格精度與伺服器驗證,不能只靠輸入框的 min 或前端小計決定收款金額。

computed、方法與 watch 怎麼選?

只想從現有資料得到結果,例如小計、篩選後的商品或顯示文字,先考慮 computed。它會根據響應式依賴快取結果,依賴沒有變時不必重新計算。

普通方法適合需要傳入參數、或在呼叫時執行的工作。watch 則常用在資料變動後要做別的事,例如發出請求;不要為了顯示一個可直接算出的數字,先用 watch 再同步另一份小計。

computed 的 getter 保持純計算:不發網路請求、不修改其他狀態,也不在裡面操作 DOM。預設的 computed 是唯讀衍生值,想改結果應改它的來源,而不是直接覆寫小計。

確認更新時,順便查兩個容易忽略的地方

若數量改了卻沒更新,先看來源是不是響應式資料,以及計算中是否真的讀到該來源。把數值在外面先取出成普通變數,再拿那個舊變數計算,就不會自動跟著 ref 變動。

這個小計例子沒有連接訂單、付款或庫存 API。先在測試頁改幾個數量,確認畫面與計算一致;整合正式流程時,後端仍要重新核價。撤回則還原該元件,不必更動全站設定。

參考資料

Vue 3資料核對於2026年10月3日;示例金額不是正式商品定價。

原文鏈接:https://wntheme.com/vue-computed-subtotal/,轉載請註明出處。
0

評論0

顯示驗證碼
沒有帳號?註冊  忘記密碼?