Vue 中 filter 與 computed 的區(qū)別與用法解析
watch與computed、filter:
watch:監(jiān)控已有屬性,一旦屬性發(fā)生了改變就去自動(dòng)調(diào)用對(duì)應(yīng)的方法
computed:監(jiān)控已有的屬性,一旦屬性的依賴發(fā)生了改變,就去自動(dòng)調(diào)用對(duì)應(yīng)的方法
filter:js中為我們提供的一個(gè)方法,用來(lái)幫助我們對(duì)數(shù)據(jù)進(jìn)行篩選
watch與computed的區(qū)別:
1.watch監(jiān)控現(xiàn)有的屬性,computed通過(guò)現(xiàn)有的屬性計(jì)算出一個(gè)新的屬性
2.watch不會(huì)緩存數(shù)據(jù),每次打開(kāi)頁(yè)面都會(huì)重新加載一次,
但是computed如果之前進(jìn)行過(guò)計(jì)算他會(huì)將計(jì)算的結(jié)果緩存,如果再次請(qǐng)求會(huì)從緩存中
得到數(shù)據(jù)(所以computed的性能比watch更好一些)
最近遇到一個(gè)很不錯(cuò)的候選人,經(jīng)驗(yàn)豐富,有技術(shù)亮點(diǎn),但在一些細(xì)枝末節(jié)問(wèn)題上沒(méi)有回答的很好,最終還是被刷了。面試過(guò)程中有一個(gè)問(wèn)題我印象特別深刻: Vue 中filter與computed屬性的區(qū)別 ,可惜候選人在現(xiàn)場(chǎng)沒(méi)有回答上,這里總結(jié)一下:
filter 與 computed 的區(qū)別
1. 觸發(fā)時(shí)機(jī)不同
computed 屬性背后的處理邏輯比較復(fù)雜,依賴 Vue 的數(shù)據(jù)更新通知機(jī)制,在屬性所依賴的其他數(shù)據(jù)項(xiàng)發(fā)生變化時(shí)才會(huì)重新觸發(fā)計(jì)算。優(yōu)點(diǎn)是計(jì)算頻率相對(duì)較低;缺點(diǎn)是依賴于組件,難以抽取成獨(dú)立邏輯,也就是復(fù)用性低。
filter 則顯的簡(jiǎn)單很多,只在顯式調(diào)用時(shí)觸發(fā),一般應(yīng)用在模板渲染上。優(yōu)點(diǎn)是容易在組件外抽象;缺點(diǎn)是每次模板渲染時(shí)都需要重新執(zhí)行計(jì)算。可以通過(guò)示例 感受調(diào)用時(shí)機(jī)的區(qū)別:
2. 應(yīng)用范圍不同
computed 很廣泛,可以應(yīng)用在其他computed、methods、生命周期函數(shù)、模板;filter 一般只應(yīng)用于模板渲染上,如果要在其他位置復(fù)用,需要使用 this._f 函數(shù):
Vue.component('HelloWorld', { filters: { hello() { return 'hello'; } }, methods: { ping() { return `${this._f('hello')()} world`; } } })
另外,在使用上filter支持鏈?zhǔn)秸{(diào)用,這為其增加了組合拼接的能力:
<span> {{ name | normalize | capitalize }} </span>
3. 定義方式
最后需要指出,computed 屬性只能在組件內(nèi)部或通過(guò)mixins對(duì)象定義;而 filter 有兩種定義方式,一是在組件內(nèi)部通過(guò) filters 屬性定義;一是在組件外部通過(guò) Vue.filter 函數(shù)定義:
Vue.component('HelloWorld', { filters: { hello() { return 'hello'; } } }); Vue.filter('hello', ()=> 'hello');
應(yīng)用規(guī)則
綜上,filter 無(wú)法緩存,調(diào)用頻率高,因此特別適用于格式化輸出場(chǎng)景,比如日期格式化。filter 具有組合調(diào)用能力,因此可以在項(xiàng)目架構(gòu)層面定義一堆基礎(chǔ)的、簡(jiǎn)單的filter,按需在組件內(nèi)組合適用。
computed 屬性具有緩存能力,在組件內(nèi)普適性更強(qiáng),因此適用于復(fù)雜的數(shù)據(jù)轉(zhuǎn)換、統(tǒng)計(jì)等場(chǎng)景。
總結(jié)
以上所述是小編給大家介紹的Vue 中 filter 與 computed 的區(qū)別與用法解析,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
vue自定義表格列的實(shí)現(xiàn)過(guò)程記錄
這篇文章主要給大家介紹了關(guān)于vue自定義表格列的相關(guān)資料,表格組件在開(kāi)發(fā)中經(jīng)常會(huì)用到,文章通過(guò)示例代碼介紹的也很詳細(xì),需要的朋友可以參考下2021-06-06解決VUEX兼容IE上的報(bào)錯(cuò)問(wèn)題
下面小編就為大家分享一篇解決VUEX兼容IE上的報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03vue實(shí)現(xiàn)點(diǎn)擊按鈕切換背景顏色的示例代碼
這篇文章主要介紹了用vue簡(jiǎn)單的實(shí)現(xiàn)點(diǎn)擊按鈕切換背景顏色,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06vue使用計(jì)算屬性完成動(dòng)態(tài)滑竿條制作
這篇文章主要介紹了vue使用計(jì)算屬性完成動(dòng)態(tài)滑竿條制作,文章圍繞計(jì)vue算屬制作動(dòng)態(tài)滑竿條的相關(guān)代碼完成內(nèi)容,需要的朋友可以參考一下2021-12-12在vite項(xiàng)目中使用@進(jìn)行文件的引入方式
這篇文章主要介紹了在vite項(xiàng)目中使用@進(jìn)行文件的引入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03Vue Element前端應(yīng)用開(kāi)發(fā)之組織機(jī)構(gòu)和角色管理
本篇文章繼續(xù)深化Vue Element權(quán)限管理模塊管理的內(nèi)容,介紹組織機(jī)構(gòu)和角色管理模塊的處理,使得我們了解界面組件化模塊的開(kāi)發(fā)思路和做法,提高我們界面設(shè)計(jì)的技巧,并減少代碼的復(fù)雜性,提高界面代碼的可讀性,同時(shí)也是利用組件的復(fù)用管理。2021-05-05vue-router 源碼之實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 vue-router
這篇文章主要介紹了vue-router 源碼之實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 vue-router,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07