vue的計算屬性computed

Vue中的computed屬性稱為計算屬性。模板內(nèi)的表達式非常便利,但是設計它們的初衷是用于簡單運算的。在模板中放入太多的邏輯會讓模板過重且難以維護。

例如:

在這個地方,模板不再是簡單的聲明式邏輯。你必須看一段時間才能意識到,這里是想要顯示變量 message 的翻轉(zhuǎn)字符串。當你想要在模板中多次引用此處的翻轉(zhuǎn)字符串時,就會更加難以處理。

你可以使用computed屬性這么寫:

結(jié)果:

Original message: "Hello"

Computed reversed message: "olleH"

問:為什么reversedMessage不可以在data里面定義?

答:定義會報錯,因為computed作為計算屬性定義reversedMessage返回對應的結(jié)果給這個變量(通俗的理解,reversedMessage只是監(jiān)控變量,對message進行處理,實際上重新返回了message),變量不可以被重復定義和賦值。


計算屬性只在第一次調(diào)用時執(zhí)行運算過程,計算結(jié)果會被緩存在內(nèi)存中,多次調(diào)用時,如果依賴的數(shù)據(jù)未發(fā)生變化,不會再去進行運算過程的執(zhí)行。

畫重點:computed依賴于data中的數(shù)據(jù),只有在它的相關(guān)依賴數(shù)據(jù)發(fā)生改變時才會重新求值。我理解為,computed只能監(jiān)控放在data等對象下的實例數(shù)據(jù)。

看下面的例子:

?<button?@click="getMethodsDate">methods</button>

?<button?@click="getComputedDate">computed</button>

??computed:?{

????computedDate()?{

??????return?new?Date();

????}

??},

????getMethodsDate()?{

??????alert(new?Date());

????},

????//?返回computed選項中設置的計算屬性——computedDate

????getComputedDate()?{

??????alert(this.computedDate);

????},


多次點擊computed按鈕,返回的時間是相同的!每次點擊methods按鈕返回的時間是不同的。

原因正是computed依賴于data中的數(shù)據(jù),new Date()不是依賴型數(shù)據(jù)(不是放在data等對象下的實例數(shù)據(jù)),所以computed只提供了緩存的值,而沒有重新計算。

只有符合:1.存在依賴型數(shù)據(jù) 2.依賴型數(shù)據(jù)發(fā)生改變這兩個條件,computed才會重新計算。


總結(jié):

支持緩存,只有依賴數(shù)據(jù)發(fā)生改變,才會重新進行計算;

不支持異步,當computed內(nèi)有異步操作時無效,無法監(jiān)聽數(shù)據(jù)的變化;

computed 屬性值會默認走緩存,計算屬性是基于它們的響應式依賴進行緩存的,也就是基于data中聲明過或者父組件傳遞的props中的數(shù)據(jù)通過計算得到的值

如果一個屬性是由其他屬性計算而來的,這個屬性依賴其他屬性,是多對一或者一對一,一般用computed

如果computed屬性屬性值是函數(shù),那么默認會走get方法;函數(shù)的返回值就是屬性的屬性值;在computed中的,屬性都有一個get和一個set方法,當數(shù)據(jù)變化時,調(diào)用set方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容