Vue學習筆記集--computed

computed

在 Vue 3 的 Composition API 中,computed 用于定義響應式計算屬性

它的核心特性是自動追蹤依賴緩存計算結果(依賴未變化時不會重新計算)


基本用法

1. 定義只讀計算屬性
import { ref, computed } from 'vue';const count = ref(0);
const doubleCount = computed(() => count.value * 2); // 返回一個 Ref 對象console.log(doubleCount.value); // 0 → 初始值
count.value = 2;
console.log(doubleCount.value); // 4 → 自動更新
2. 在模板中使用
<template><div>{{ doubleCount }}</div> <!-- 自動解包,無需 .value -->
</template>

computed 的響應式依賴

  • 自動追蹤依賴:計算屬性會追蹤其內部使用的所有響應式變量(如 refreactive)。
  • 緩存機制:只有依賴變化時才會重新計算,否則直接返回緩存值。
const a = ref(1);
const b = ref(2);
const sum = computed(() => a.value + b.value);a.value = 3; // sum 自動重新計算 → 3 + 2 = 5
b.value = 4; // sum 再次計算 → 3 + 4 = 7

可寫計算屬性(Setter)

computed 可以接受一個包含 getset 的對象,實現雙向綁定:

const firstName = ref('John');
const lastName = ref('Doe');// 可寫計算屬性
const fullName = computed({get: () => `${firstName.value} ${lastName.value}`,set: (newValue) => {const [first, last] = newValue.split(' ');firstName.value = first;lastName.value = last;},
});// 修改計算屬性
fullName.value = 'Jane Smith'; // 自動更新 firstName 和 lastName
console.log(firstName.value); // 'Jane'
console.log(lastName.value); // 'Smith'

reactive 結合使用

將計算屬性綁定到 reactive 對象中:

import { reactive, computed } from 'vue';const state = reactive({price: 100,quantity: 2,
});// 計算總價
state.total = computed(() => state.price * state.quantity);console.log(state.total.value); // 200

性能優化:避免重復計算

計算屬性會緩存結果,以下場景體現優勢:

const list = ref([1, 2, 3, 4, 5]);// 計算過濾后的列表(只有 list 變化時重新計算)
const evenNumbers = computed(() => list.value.filter(num => num % 2 === 0));list.value.push(6); // evenNumbers 自動更新為 [2,4,6]

注意事項

  1. 避免副作用:計算屬性應是純函數,不要在其中修改外部狀態。

    // ? 錯誤示例(副作用)
    const invalidComputed = computed(() => {count.value++; // 禁止修改依賴!return count.value;
    });
    
  2. 依賴非響應式數據:如果依賴非響應式變量,計算屬性不會更新:

    let staticValue = 10;
    const badComputed = computed(() => staticValue); // 不會更新!
    
  3. 性能敏感場景:復雜計算建議使用 computed 緩存結果,而非在模板中直接調用方法。


與 Vue 2 的對比

特性Vue 2 的 computedVue 3 的 computed
定義位置computed 選項setup 中通過函數定義
返回值類型直接通過屬性訪問Ref 對象(需 .value 訪問)
響應式依賴追蹤自動自動
可寫性不支持 Setter支持 Setter

完整示例

<template><div><input v-model="price" type="number" placeholder="價格"><input v-model="quantity" type="number" placeholder="數量"><p>總價: {{ total }}</p><button @click="resetTotal">重置總價</button></div>
</template><script setup>
import { ref, computed } from 'vue';const price = ref(0);
const quantity = ref(0);// 計算總價
const total = computed({get: () => price.value * quantity.value,set: (value) => {price.value = value / 2;quantity.value = 2;},
});// 通過 Setter 修改計算屬性
const resetTotal = () => {total.value = 0; // 觸發 Setter → price=0, quantity=0
};
</script>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899481.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899481.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899481.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

飛致云榮獲“Alibaba Cloud Linux最佳AI鏡像服務商”稱號

2025年3月24日&#xff0c;阿里云云市場聯合龍蜥社區發布“2024年度Alibaba Cloud Linux最佳AI鏡像服務商”評選結果。 經過主辦方的嚴格考量&#xff0c;飛致云&#xff08;即杭州飛致云信息科技有限公司&#xff09;憑借旗下MaxKB開源知識庫問答系統、1Panel開源面板、Halo開…

Vue如何利用Postman和Axios制作小米商城購物車----簡版

實現功能&#xff1a;全選、單選、購物數量顯示、合計價格顯示 實現效果如下&#xff1a; 思路&#xff1a; 1.數據要利用寫在Postman里面&#xff0c;通過地址來調用Postman里面的數據。 2.寫完數據后&#xff0c;給寫的數據一個名字&#xff0c;然后加上一個空數組&#xf…

第一篇:系統分析師首篇

目錄 一、目標二、計劃三、完成情況1.宏觀思維導圖2.過程中的團隊管理和其它方面的思考 四、意外之喜(最少2點)1.計劃內的明確認知和思想的提升標志2.計劃外的具體事情提升內容和標志 一、目標 通過參加考試&#xff0c;訓練學習能力&#xff0c;而非單純以拿證為目的。 1.在復…

CSS學習筆記4——盒子模型

目錄 盒子模型是什么&#xff1f; 盒子模型的組成 一、div標簽 二、邊框屬性 1、border-style:邊框樣式 2、border-width:邊框寬度 3、border-color:邊框顏色、border&#xff1a;綜合設置 4、border-radius:圓角邊框 5、border-image&#xff1a;圖像邊框 三、邊距屬性…

復現文獻中的三維重建圖像生成,包括訓練、推理和可視化

要復現《One - 2 - 3 - 45 Fast Single Image to 3D Objects with Consistent Multi - View Generation and 3D Diffusion (CVPR)2024》文獻中的三維重建圖像生成&#xff0c;包括訓練、推理和可視化&#xff0c;并且確保代碼能正常運行&#xff0c;下面是基本的實現步驟和示例…

stable diffusion 本地部署教程 2025最新版

前提&#xff1a; 需要環境 git git下載地址Git - Downloading Package ? 直接裝即可 python3.10.6 下載地址 Python Release Python 3.10.6 | Python.org ? 記得python環境一定要3.10.6&#xff01;&#xff01;&#xff01; 第一個版本 項目地址https://github.…

【二刷代碼隨想錄】螺旋矩陣求解方法、推薦習題

一、求解方法 &#xff08;1&#xff09;按點模擬路徑 在原有坐標的基準上&#xff0c;疊加 橫縱坐標 的變化值&#xff0c;求出下一位置&#xff0c;并按題完成要求。但需注意轉角的時機判斷&#xff0c;特別是最后即將返回上一出發點的位置。 &#xff08;2&#xff09;按層…

從Manus到OpenManus:AI智能體技術如何重塑未來生活場景?

從Manus到OpenManus&#xff1a;AI智能體技術如何重塑未來生活場景&#xff1f; 一、現狀&#xff1a;AI智能體技術面臨的三大核心矛盾 &#xff08;通過分析用戶高頻痛點與市場反饋提煉&#xff09; 能力與門檻的失衡 Manus展示的復雜任務處理能力&#xff08;如股票分析、代…

迭代器與可迭代對象

概念層面&#xff1a; 可迭代對象&#xff1a; 一個可迭代對象是指任何可以返回一個迭代器的對象。換句話說&#xff0c;它實現了 __iter__() 方法 比如&#xff1a;列表、元組、字典、字符串、集合等 直接通過 for 循環使用&#xff0c;因為 for 循環內部會調用其 __iter__(…

總結PostgreSQL創建數據庫失敗的解決辦法

作者&#xff1a;朱金燦 來源&#xff1a;clever101的專欄 系統環境是Windows 11 專業版&#xff0c;PostgreSQL版本是17。在運行sql語句創建數據庫時出現錯誤&#xff1a; 閿欒: template database \"template1\" has a collation version mismatch DETAIL: Th…

Mybatis源碼 插件機制

簡介 插件是一種常見的擴展方式&#xff0c;大多數開源框架也都支持用戶通過添加自定義插件的方式來擴展或者改變原有的功能&#xff0c;MyBatis中也提供的有插件&#xff0c;雖然叫插件&#xff0c;但是實際上是通過攔截器(Interceptor)實現的&#xff0c;在MyBatis的插件模塊…

Android14 SystemUI中添加第三方AIDL

由于特殊需求&#xff0c;需要在SystemUI中添加第三方AIDL&#xff0c;去做一些客制化的修改。現在記錄一下AIDL添加的過程。 1.將AIDL文件拷貝到frameworks/base/packages/SystemUI/src/下&#xff0c;我要添加的AIDL文件是com/test/myctr/IDevicectr.aidl&#xff0c;添加后的…

Binlog、Redo log、Undo log的區別

一、binlog和redo log的區別 特性binlogredo log記錄對象記錄的是 MySQL 服務器的事務操作&#xff0c;針對的是整個數據庫實例。記錄的是 InnoDB 存儲引擎的數據頁變化&#xff0c;針對的是具體的存儲引擎層面。記錄內容記錄的是事務的邏輯操作&#xff0c;例如 SQL 語句&…

TDengine 中的異常恢復

簡介 本章主要介紹在 TDengine 執行命令過程中發生異常&#xff0c;如何手工終于執行的任務。可以終止連接&#xff0c;線上查詢及終止事務。 如果一個事務 在一個復雜的應用場景中&#xff0c;連接和查詢任務等有可能進入一種錯誤狀態或者耗時過長遲遲無法結束&#xff0c;…

全球化2.0 | ZStack舉辦香港Partner Day,推動AIOS智塔+DeepSeek海外實踐

2025年3月21日&#xff0c;云軸科技ZStack在香港成功舉辦了主題為“ZStack AIOS 智塔與 DeepSeek 私有化方案介紹及企業應用落地實踐”的 Partner Day 活動。此次活動吸引了眾多海外合作伙伴&#xff0c;共同探討 AI Infra 平臺在企業私有化 AI 中的應用與價值閉環。 ZStack CT…

ERP、MES和CRM三大企業系統的詳細介紹及對比分析

以下是關于ERP、MES和CRM三大企業系統的詳細介紹及對比分析&#xff1a; 1. ERP&#xff08;企業資源計劃&#xff0c;Enterprise Resource Planning&#xff09; 核心功能&#xff1a; 集成管理&#xff1a;財務、采購、庫存、生產、人力資源等核心業務流程資源優化&#xf…

(二十)Dart 中的多態

Dart 中的多態教程 一、多態的概念 多態是面向對象編程中的一個重要概念。它允許將子類類型的指針賦值給父類類型的指針&#xff0c;同一個函數調用會有不同的執行效果。換句話說&#xff0c;子類的實例可以賦值給父類的引用。多態的核心在于父類定義一個方法不去實現&#x…

【C++初階】第12課—list

文章目錄 1. list的構造2. list迭代器的常見接口2.1 list遍歷的迭代器接口2.2 list修改數據的迭代器接口2.3 list排序、逆序、合并相關操作的成員函數 3. 模擬實現list3.1 模擬實現list的構造3.2 模擬實現list的尾插3.3 模擬實現迭代器iterator3.4 模擬實現list的插入刪除3.5 模…

思維鏈技術(Chain-of-Thought, CoT)

思維鏈&#xff08;Chain-of-Thought, CoT&#xff09;是一種通過模擬人類逐步推理過程來提升大型語言模型&#xff08;LLM&#xff09;復雜任務表現的技術。其核心思想是讓模型在生成最終答案前&#xff0c;先輸出中間推理步驟&#xff0c;從而增強邏輯性和可解釋性。 1. 基礎…

谷粒微服務高級篇學習筆記整理---異步線程池

多線程回顧 多線程實現的4種方式 1. 繼承 Thread 類 通過繼承 Thread 類并重寫 run() 方法實現多線程。 public class MyThread extends Thread {Overridepublic void run() {System.out.println("線程運行: " Thread.currentThread().getName());} }// 使用 pub…