在vue里面第一個(gè)要避免使用的就是eventBus,雖然它很方便,但是它帶來(lái)的后果是更加嚴(yán)重的,可能引發(fā)很多難以查找的bug。
第二個(gè)就是watch。當(dāng)一個(gè)組件內(nèi)有多個(gè)watch的情況下,很可能就會(huì)發(fā)生這么一種情況,不知道是哪個(gè)watch引起的bug,不知道是誰(shuí)觸發(fā)了watch。
所以,我感到很疑惑!
在vue中如何優(yōu)雅的使用watch?
以及watch設(shè)計(jì)的初衷是什么?
既然是數(shù)據(jù)驅(qū)動(dòng)的框架,不應(yīng)該是通過(guò)數(shù)據(jù)變化引起組件變化嗎?
而像watch這種監(jiān)聽(tīng)數(shù)據(jù)變化這種方式是不是應(yīng)該被剔除?
你這些問(wèn)題真的很難回答,昨天我看到一句話,不能問(wèn)一個(gè)技術(shù)的設(shè)計(jì)目的是什么,而是要問(wèn),我遇到了哪些問(wèn)題,有哪些技術(shù)可以解決我的問(wèn)題?
當(dāng)代的軟件框架基本都是建立在軟件設(shè)計(jì)模式這個(gè)思維范疇內(nèi)的,那么watch從語(yǔ)義和實(shí)際用途分析,顯然是一種觀察者模式。那么觀察者模式本來(lái)就是應(yīng)用于誰(shuí)對(duì)變化的狀態(tài)感興趣,誰(shuí)去“觀察”這個(gè)狀態(tài)。在某些情況下,確實(shí)需要跟蹤觀察值的變化,確實(shí)要知道變化前的值和變化后的值,那么就需要使用watch。
如果題主遇到了上面的問(wèn)題,那么可以嘗試watch。
樓主只需要將watch和computed進(jìn)行對(duì)比:
watch只對(duì)一個(gè)對(duì)象進(jìn)行監(jiān)聽(tīng)computed對(duì)多個(gè)對(duì)象進(jìn)行監(jiān)聽(tīng)為什么要和computed對(duì)比呢,因?yàn)閮烧叩膶?shí)現(xiàn)原理是一樣的,都是通過(guò)觀察者模式,并且用的時(shí)候的感覺(jué)也很相似,無(wú)非是監(jiān)聽(tīng)的數(shù)據(jù)變化了觸發(fā)的一系列動(dòng)作。
那么watch的適用場(chǎng)景自然而然就出來(lái)了
需要對(duì)單個(gè)對(duì)象的變化做額外動(dòng)作且無(wú)需返回值的
那如果有兩個(gè)對(duì)象其中任意一個(gè)做變化,且不管其中哪個(gè)對(duì)象變化都是做相同的動(dòng)作的時(shí)候應(yīng)該怎么辦呢
把這兩個(gè)對(duì)象寫(xiě)在一個(gè)對(duì)象里面,再watch這個(gè)對(duì)象
例如:
data(){
return {
dataWrapper:{
data1:null,
data2:null
}
}
},
watch: {
dataWrapper(){
handler(){
// do something...
},
deep: true
}
}
或者
data(){
return {
data1:null,
data2:null
}
},
computed:{
dataWrapper(){
const {data1, data2} = this
return {
data1,
data2
}
}
},
watch: {
dataWrapper(){
// do something...
}
}
多個(gè)watch之間應(yīng)該盡量避免數(shù)據(jù)耦合,上面介紹了一種解耦方式,拋磚引玉
存在即合理,沒(méi)這個(gè)需求肯定不會(huì)出這個(gè)API
樓主加油
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。