在vue2中,我們可以使用watch{}來(lái)監(jiān)聽(tīng)data數(shù)據(jù)中特定的值,寫(xiě)法也很簡(jiǎn)單。基本上,所有的監(jiān)聽(tīng)都要寫(xiě)成如下函數(shù)形式,函數(shù)接收兩個(gè)參數(shù),一個(gè)是newvalue,另一個(gè)是oldvalue,分別代表新值和舊值,但在vue3中,我們所有的監(jiān)聽(tīng)不會(huì)寫(xiě)在一起,而是我們需要監(jiān)聽(tīng)一個(gè)數(shù)據(jù)就需要寫(xiě)一個(gè)watch。
官方對(duì)vue3中的watch可監(jiān)視對(duì)象做了以下限制。簡(jiǎn)而言之,就是只能是響應(yīng)式數(shù)據(jù),一個(gè)有返回值的函數(shù),和包含響應(yīng)式數(shù)據(jù)或者函數(shù)的數(shù)組。同樣的,vue3中的watch也有深度監(jiān)聽(tīng)deep和初始監(jiān)聽(tīng)immeaidte。需要注意的是如果你監(jiān)聽(tīng)的是reactive監(jiān)聽(tīng)的數(shù)據(jù),是自動(dòng)開(kāi)啟深度監(jiān)聽(tīng)的。
vue3中的監(jiān)聽(tīng)寫(xiě)法為:
watch(監(jiān)聽(tīng)的數(shù)據(jù),(newvalue,oldvalue)=》{ console.log(當(dāng)監(jiān)聽(tīng)數(shù)據(jù)改變時(shí)觸發(fā)的函數(shù)內(nèi)容) })
還有一個(gè)需要注意的問(wèn)題,當(dāng)我們監(jiān)聽(tīng)的響應(yīng)式對(duì)象中的某個(gè)數(shù)據(jù),而且這個(gè)數(shù)據(jù)是對(duì)象類(lèi)型,當(dāng)我們改變對(duì)象中的內(nèi)容時(shí),監(jiān)聽(tīng)會(huì)正常觸發(fā),但是當(dāng)我們修改整個(gè)對(duì)象,如果不寫(xiě)成函數(shù)式,監(jiān)聽(tīng)是不會(huì)觸發(fā)的。如果監(jiān)聽(tīng)的不是對(duì)象類(lèi)型而是普通類(lèi)型,則沒(méi)有上述問(wèn)題。
所以,我推薦大家監(jiān)聽(tīng)時(shí),監(jiān)聽(tīng)的數(shù)據(jù)都要寫(xiě)成函數(shù)式。
了解更多vue3知識(shí)點(diǎn)這里。