Vue數(shù)據(jù)響應(yīng)式

什么是數(shù)據(jù)響應(yīng)式?優(yōu)點是?

“響應(yīng)式”,是指當數(shù)據(jù)改變后,Vue 會通知到使用該數(shù)據(jù)的代碼。例如,視圖渲染中使用了數(shù)據(jù),數(shù)據(jù)改變后,視圖也會自動更新。

數(shù)據(jù)(data)響應(yīng)式的基本代碼:

const vm = new Vue({data:{n:0}})

響應(yīng)式是vue的一大特色,不同于其他框架更新數(shù)據(jù)時繁雜操作,數(shù)據(jù)響應(yīng)式最大的優(yōu)點就是只要改了data就會自動更新ui。

數(shù)據(jù)響應(yīng)式的缺點

數(shù)據(jù)響應(yīng)式由于使用的是Object.defineProperty(vue2)這個api,它不能監(jiān)聽還不存在的屬性,所以如果你新增了一個屬性,vue是沒有辦法察覺到的。

看下面的這串代碼:

Object.defineProperty(obj,"n",{...})

在上面代碼當中必須要有一個 n,才能夠監(jiān)聽和代理obj.n。這是Object.defineProperty的bug.如果工作中忘記了給這個n,vue就會給出一個警告,例如:

new Vue({

? data: {},

? template: `<div>{{n}}</div>`

}).$mount("#app");

上面代碼當中,data是一個空的,然后再寫了一個n,Vue一旦發(fā)現(xiàn)是undefined或者是null它都一律不顯示在頁面上。

在這里控制臺會出現(xiàn)一個報錯:“屬性或者方法n 沒有定義在實例上面,但是你卻引用了它?!盫ue依然會正常的去執(zhí)行這些代碼,但是當它渲染到div的時候卻發(fā)現(xiàn)找不到n,所以不能再沒有定義n的情況下進行使用。

該怎么解決呢?

vue新提供了解決這個問題的api:Vue.set( target, propertyName/index, value )或者this.$set

參數(shù):

● {Object | Array} target? (要更改的數(shù)據(jù)源(可以是對象或者數(shù)組))

● {string | number} propertyName/index (要更改的具體數(shù)據(jù))

● {any} value(重新賦的值)

返回值:設(shè)置的值。

用法:

向響應(yīng)式對象中添加一個 property,并確保這個新 property 同樣是響應(yīng)式的,且觸發(fā)視圖更新。它必須用于向響應(yīng)式對象上添加新 property,因為 Vue 無法探測普通的新增 property (比如 this.myObject.newProperty = 'hi')

注意:對象不能是 Vue 實例,或者 Vue 實例的根數(shù)據(jù)對象。

還有一件事,忘記給屬性賦值可以用提高記性每次都賦好值來規(guī)避這個問題,但是如果想給數(shù)組新增它的key,value的值,因為你提前不知道數(shù)組到底有多少值,如果用Vue.set會很麻煩,所以Vue改造了push()方法,這種操作叫做變異方法。你可以直接采用push()來增加數(shù)組內(nèi)的東西。

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

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

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