computed理解

一開(kāi)始使用計(jì)算屬性時(shí),我會(huì)有這樣的疑惑:計(jì)算屬性設(shè)計(jì)的初衷是什么?計(jì)算屬性能實(shí)現(xiàn)的,methods也能實(shí)現(xiàn),如何選擇?為什么專(zhuān)門(mén)給出一個(gè)計(jì)算屬性,它和watch的區(qū)別在哪里?

1、為何要computed?

vue的數(shù)據(jù)(data)是響應(yīng)式的,有些時(shí)候,模板想要綁定的不是數(shù)據(jù)本身,而是數(shù)據(jù)的轉(zhuǎn)換或者一定規(guī)則的計(jì)算結(jié)果(return g*1000),這種情況下就需要計(jì)算屬性上場(chǎng)了。計(jì)算屬性屬于響應(yīng)式依賴(lài),只要依賴(lài)的數(shù)據(jù)發(fā)生變化,計(jì)算屬性的值就自動(dòng)重新計(jì)算,無(wú)需重新調(diào)用和觸發(fā),只要在模板中綁定計(jì)算屬性,它的值就會(huì)隨著依賴(lài)的數(shù)據(jù)同步變化。

2、與methods的區(qū)別?

可以將同一函數(shù)定義為一個(gè)方法而不是一個(gè)計(jì)算屬性。兩種方式的最終結(jié)果確實(shí)是完全相同的。然而,不同的是計(jì)算屬性是基于它們的響應(yīng)式依賴(lài)進(jìn)行緩存的。只在相關(guān)響應(yīng)式依賴(lài)發(fā)生改變時(shí)它們才會(huì)重新求值。這就意味著只要依賴(lài)的數(shù)據(jù)還沒(méi)有發(fā)生改變,多次訪問(wèn)計(jì)算屬性會(huì)立即返回之前的計(jì)算結(jié)果,而不必再次執(zhí)行函數(shù)。相比之下,每當(dāng)觸發(fā)重新渲染時(shí),調(diào)用方法將總會(huì)再次執(zhí)行函數(shù),花費(fèi)性能開(kāi)銷(xiāo)比較大。

兩者的區(qū)別就是computed有緩存,methods沒(méi)有緩存,每次都重新計(jì)算。

這也同樣意味著下面的計(jì)算屬性將不再更新,因?yàn)?Date.now()?不是響應(yīng)式依賴(lài):

computed: {

? now: function(){

? ? return Date.now()

? }

}

3、與偵聽(tīng)屬性watch的區(qū)別?

computed適合監(jiān)聽(tīng)多個(gè)數(shù)據(jù)變化導(dǎo)致一個(gè)結(jié)果變化的場(chǎng)景。

watch適合一個(gè)數(shù)據(jù)變化,導(dǎo)致多個(gè)結(jié)果變化的場(chǎng)景

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

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

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