一開始使用計(jì)算屬性時看杭,我會有這樣的疑惑:計(jì)算屬性設(shè)計(jì)的初衷是什么?計(jì)算屬性能實(shí)現(xiàn)的阅爽,methods也能實(shí)現(xiàn)路幸,如何選擇?為什么專門給出一個計(jì)算屬性付翁,它和watch的區(qū)別在哪里简肴?
1、為何要computed百侧?
vue的數(shù)據(jù)(data)是響應(yīng)式的砰识,有些時候,模板想要綁定的不是數(shù)據(jù)本身佣渴,而是數(shù)據(jù)的轉(zhuǎn)換或者一定規(guī)則的計(jì)算結(jié)果(return g*1000)辫狼,這種情況下就需要計(jì)算屬性上場了。計(jì)算屬性屬于響應(yīng)式依賴辛润,只要依賴的數(shù)據(jù)發(fā)生變化膨处,計(jì)算屬性的值就自動重新計(jì)算,無需重新調(diào)用和觸發(fā)砂竖,只要在模板中綁定計(jì)算屬性灵迫,它的值就會隨著依賴的數(shù)據(jù)同步變化。
2晦溪、與methods的區(qū)別瀑粥?
可以將同一函數(shù)定義為一個方法而不是一個計(jì)算屬性。兩種方式的最終結(jié)果確實(shí)是完全相同的三圆。然而狞换,不同的是計(jì)算屬性是基于它們的響應(yīng)式依賴進(jìn)行緩存的避咆。只在相關(guān)響應(yīng)式依賴發(fā)生改變時它們才會重新求值。這就意味著只要依賴的數(shù)據(jù)還沒有發(fā)生改變修噪,多次訪問計(jì)算屬性會立即返回之前的計(jì)算結(jié)果查库,而不必再次執(zhí)行函數(shù)。相比之下黄琼,每當(dāng)觸發(fā)重新渲染時樊销,調(diào)用方法將總會再次執(zhí)行函數(shù),花費(fèi)性能開銷比較大脏款。
兩者的區(qū)別就是computed有緩存围苫,methods沒有緩存,每次都重新計(jì)算撤师。
這也同樣意味著下面的計(jì)算屬性將不再更新剂府,因?yàn)?Date.now()?不是響應(yīng)式依賴:
computed: {
? now: function(){
? ? return Date.now()
? }
}
3、與偵聽屬性watch的區(qū)別剃盾?
computed適合監(jiān)聽多個數(shù)據(jù)變化導(dǎo)致一個結(jié)果變化的場景腺占。
watch適合一個數(shù)據(jù)變化,導(dǎo)致多個結(jié)果變化的場景