最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3中計算屬性的使用方式和優(yōu)勢詳解

 更新時間:2026年02月11日 09:00:19   作者:Mr Xu_  
在 Vue 3 的開發(fā)過程中,計算屬性是一個強大而優(yōu)雅的工具,它不僅能簡化模板邏輯,還能顯著提升代碼的可讀性、可維護性和運行效率,本文將結(jié)合兩個典型開發(fā)場景,深入剖析計算屬性的正確使用方式及其帶來的諸多優(yōu)勢,需要的朋友可以參考下

一、為什么需要計算屬性?

在 Vue 模板中直接寫復(fù)雜邏輯(如三元表達式、數(shù)組判斷、字符串匹配等)雖然“快捷”,但會迅速導(dǎo)致以下問題:

  • 模板臃腫:HTML 與業(yè)務(wù)邏輯混雜,難以閱讀;
  • 復(fù)用困難:相同邏輯若需在多處使用,只能復(fù)制粘貼;
  • 調(diào)試困難:無法打斷點、無法單元測試;
  • 性能隱患:模板中的表達式每次渲染都會重新執(zhí)行,即使依賴未變。

而計算屬性通過 響應(yīng)式緩存機制邏輯封裝能力,完美解決了上述痛點。

二、案例分析:從“壞味道”到最佳實踐

案例一:動態(tài) class 的復(fù)雜條件判斷

反面示例:模板中嵌套多重三元表達式

<div class="bengContentBox" :class="[
    resData.list.length == 1 ? 'one-data' : 
    resData.list.length == 3 ? 'three-data' : 
    // ... 更多條件
]">

問題:邏輯隱藏在模板中,難以擴展;條件越多,可讀性越差;無法復(fù)用。

正確做法:提取為計算屬性

<template>
  <div class="bengContentBox" :class="contentBoxClass"></div>
</template>
 
<script setup>
import { computed } from 'vue';
 
const contentBoxClass = computed(() => {
  const { list, stationName } = resData.value;
  if (list.length === 1) return 'one-data';
  if (list.length === 3) return 'three-data';
  if (stationName === '一級站') return 'one-four-data';
  return ''; // 默認值
});
</script>

優(yōu)勢:

  • 邏輯集中、清晰;
  • 支持任意復(fù)雜判斷(如組合條件、函數(shù)調(diào)用);
  • 可被其他組件或邏輯復(fù)用;
  • 利用 Vue 的緩存機制,僅當 resData 變化時才重新計算。

案例二:硬編碼字符串判斷的維護噩夢

反面示例:數(shù)組硬編碼 + includes 判斷

const isTwoLevelPump = computed(() => {
  const { stationName } = resData.value;
  return ["二級站", "三級站", "四級站", "崗陳東站", "崗陳西站"].includes(stationName);
});

問題:

  • 站點名稱散落在代碼各處,修改成本高;
  • 無法表達更多語義(如是否具備進水口、出水口等);
  • 多個類似判斷會導(dǎo)致重復(fù)代碼。

正確做法:使用配置對象(Config Map)

const STATION_CONFIG = {
  '二級站': { type: 'twoLevelPump', hasInlet: true, hasOutlet: true },
  '三級站': { type: 'twoLevelPump', hasInlet: true, hasOutlet: true },
  '長興站': { type: 'singlePump', hasInlet: true, hasOutlet: false },
  '一級站': { type: 'mainStation', hasInlet: false, hasOutlet: true },
  // 可輕松擴展新站點
};
 
const currentStationConfig = computed(() => 
  STATION_CONFIG[resData.value.stationName] || {}
);
 
// 使用示例
const isTwoLevelPump = computed(() => 
  currentStationConfig.value.type === 'twoLevelPump'
);

優(yōu)勢:

  • 配置驅(qū)動:業(yè)務(wù)規(guī)則集中管理,便于維護;
  • 語義豐富:一個配置項可攜帶多種屬性;
  • 類型安全友好:配合 TypeScript 可定義接口,提升開發(fā)體驗;
  • 易于測試:可單獨對 STATION_CONFIG 編寫單元測試。

三、計算屬性的核心優(yōu)勢總結(jié)

優(yōu)勢說明
? 響應(yīng)式緩存僅當依賴數(shù)據(jù)變化時才重新計算,避免無效開銷
? 邏輯解耦將業(yè)務(wù)邏輯從模板中剝離,符合“關(guān)注點分離”原則
? 可復(fù)用性計算屬性可在模板、方法、其他計算屬性中多次使用
? 可測試性可獨立導(dǎo)出并進行單元測試,提升代碼質(zhì)量
? 可讀性提升命名良好的計算屬性(如 isUserLoggedIn)比內(nèi)聯(lián)表達式更易理解

四、使用建議與注意事項

命名要有語義
避免 computed1、getCls 這類模糊名稱,推薦 userDisplayName、shouldShowWarning 等自解釋命名。

避免副作用
計算屬性應(yīng)是純函數(shù)——只依賴響應(yīng)式數(shù)據(jù),不修改外部狀態(tài),不發(fā)起 API 請求。

復(fù)雜邏輯優(yōu)先用計算屬性,而非 methods
methods 每次渲染都會調(diào)用,而 computed 有緩存,性能更優(yōu)。

結(jié)合 TypeScript 提升健壯性

interface StationConfig {
  type: 'twoLevelPump' | 'singlePump' | 'mainStation';
  hasInlet: boolean;
  hasOutlet: boolean;
}

合理拆分大型計算屬性
若一個 computed 超過 10 行,考慮拆分為多個小計算屬性或輔助函數(shù)。

五、結(jié)語

在 Vue 3 的 Composition API 體系下,computed 不僅是一個語法糖,更是構(gòu)建高內(nèi)聚、低耦合前端應(yīng)用的關(guān)鍵工具。通過將模板中的“臟邏輯”移入計算屬性,并采用配置化、模塊化的設(shè)計思想,我們可以寫出更清晰、更健壯、更易維護的代碼。

以上就是Vue3中計算屬性的使用方式和優(yōu)勢詳解的詳細內(nèi)容,更多關(guān)于Vue3計算屬性使用方式和優(yōu)勢的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue項目中更改名字和圖標的簡單實現(xiàn)步驟

    vue項目中更改名字和圖標的簡單實現(xiàn)步驟

    今天在寫vue項目時碰到的問題是怎么修改vue的網(wǎng)頁圖標,所以下面這篇文章主要給大家介紹了關(guān)于vue項目中更改名字和圖標的簡單實現(xiàn),文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • vue-i18n的9以上版本中@被用作特殊字符處理,直接用會報錯問題

    vue-i18n的9以上版本中@被用作特殊字符處理,直接用會報錯問題

    這篇文章主要介紹了vue-i18n的9以上版本中@被用作特殊字符處理,直接用會報錯問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 如何在 Vue 中使用 Axios 異步請求API

    如何在 Vue 中使用 Axios 異步請求API

    Axios 是 Javascript 中最受歡迎的 HTTP 庫之一,我們可以用它在 Vue 程序中調(diào)用API。在本文中我們用 Vue 3 和 Axios 寫一個侃爺語錄小應(yīng)用,可以用這個小程序?qū)W習英語,同時也能從侃爺?shù)脑捴械玫揭恍﹩l(fā),而且還可以學習用 Vue 異步請求API,一舉多得,何樂而不為呢?
    2021-05-05
  • vue3一些不常用卻很實用API匯總

    vue3一些不常用卻很實用API匯總

    Vue3提供了許多常用的API,這些API可以幫助開發(fā)者更高效地構(gòu)建和管理Vue應(yīng)用,這篇文章主要介紹了vue3一些不常用卻很實用API的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2026-02-02
  • vue在項目中實現(xiàn)base64加密解密的示例代碼

    vue在項目中實現(xiàn)base64加密解密的示例代碼

    這篇文章主要為大家詳細介紹了vue在項目中實現(xiàn)base64加密解密的兩種方法,文中的示例代碼講解詳細,具有一定的參考價值,有需要的小伙伴可以了解一下
    2023-10-10
  • 關(guān)于vue.js過渡css類名的理解(推薦)

    關(guān)于vue.js過渡css類名的理解(推薦)

    這篇文章主要介紹了關(guān)于vue.js過渡css類名的理解,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-04-04
  • 一次用vue3簡單封裝table組件的實戰(zhàn)過程

    一次用vue3簡單封裝table組件的實戰(zhàn)過程

    之所以封裝全局組件是為了省事,所有的目的,全都是為了偷懶,下面這篇文章主要給大家介紹了關(guān)于用vue3簡單封裝table組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • 詳解如何在Vue項目中導(dǎo)出Excel

    詳解如何在Vue項目中導(dǎo)出Excel

    這篇文章主要介紹了如何在Vue項目中導(dǎo)出Excel,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • vue項目配置env的方法步驟

    vue項目配置env的方法步驟

    在vue項目中env是全局配置文件,可以存儲不同環(huán)境下的變量,下面這篇文章主要給大家介紹了關(guān)于vue項目配置env的方法步驟,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • Vue.js原理分析之observer模塊詳解

    Vue.js原理分析之observer模塊詳解

    這篇文章主要介紹了Vue.js中observer模塊的相關(guān)資料,文中通過原理分析介紹還是相對的詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-02-02

最新評論

丰宁| 林口县| 吉林市| 东至县| 宜都市| 东至县| 陈巴尔虎旗| 巩义市| 新蔡县| 高陵县| 丹巴县| 武乡县| 宜阳县| 班戈县| 兴隆县| 广元市| 汕头市| 南岸区| 酉阳| 屏东市| 那坡县| 垫江县| 宁明县| 怀集县| 广汉市| 灵川县| 彭山县| 长丰县| 辛集市| 汽车| 昭通市| 乌兰浩特市| 桑植县| 长乐市| 裕民县| 周口市| 土默特右旗| 湖南省| 彩票| 安庆市| 岫岩|