在Vue.js 2中短荐,this.$set
的主要目的是在處理響應(yīng)式數(shù)據(jù)對(duì)象時(shí)確保添加新屬性時(shí)能夠觸發(fā)視圖更新余寥。
Vue.js通過(guò)使用Object.defineProperty
來(lái)追蹤屬性的變化砸民,但它有一個(gè)限制:如果你嘗試添加一個(gè)新的屬性到一個(gè)已經(jīng)創(chuàng)建的對(duì)象毡咏,Vue.js將無(wú)法檢測(cè)到這個(gè)變化窃祝,因?yàn)?code>Object.defineProperty只能監(jiān)聽已經(jīng)存在的屬性桩了。
這就是為什么在Vue.js 2中蔓挖,如果你想要在響應(yīng)式對(duì)象上添加新屬性夕土,并希望觸發(fā)視圖更新,你需要使用this.$set
方法瘟判。
例如怨绣,如果你有一個(gè)data對(duì)象:
data: {
myObject: {
existingProperty: 'some value'
}
}
如果你嘗試直接添加一個(gè)新屬性:
this.myObject.newProperty = 'another value';
Vue.js將無(wú)法檢測(cè)到newProperty
的變化。但是拷获,通過(guò)使用this.$set
:
this.$set(this.myObject, 'newProperty', 'another value');
Vue.js就能夠正確地追蹤這個(gè)變化篮撑,從而觸發(fā)視圖的更新。
需要注意的是匆瓜,Vue.js 3引入了一些改進(jìn)赢笨,不再需要使用this.$set
來(lái)添加新屬性,因?yàn)樗褂昧薖roxy來(lái)實(shí)現(xiàn)響應(yīng)式數(shù)據(jù)驮吱。在Vue.js 3中茧妒,你可以直接添加新屬性而無(wú)需使用this.$set
。