vm.$set和Vue.set有什么区别?

fhg3lkii  于 2023-01-17  发布在  Vue.js
关注(0)|答案(3)|浏览(191)

我已经仔细阅读了Vue文档“Reactivity in Depth”和vm.$set和Vue.set的API,但是我仍然很难决定何时使用哪一个。能够区分这两者对我来说很重要,因为在我当前的Laravel项目中,我们动态地设置了对象的许多属性。
文档中的区别似乎在于vm.$set是“For Vue instance”而Vue.set是“For plain data objects”的语言和Vue.set是全局的语言之间的区别:
但是,有一些方法可以添加属性,并使其在创建示例后具有React性。
对于Vue示例,可以使用$set(path,value)示例方法:

vm.$set('b', 2)
// `vm.b` and `data.b` are now reactive

对于普通数据对象,可以使用全局Vue.set(object,key,value)方法:

Vue.set(data, 'c', 3)
// `vm.c` and `data.c` are now reactive

最后,我想知道执行上述操作的第三个“选项”(用于一次添加多个属性)是否可以用作上述两个选项中任何一个的等效替代品(通过仅添加一个属性而不是多个属性)?
有时候你可能想给一个已有的对象分配一些属性,例如使用Object.assign()或_.extend()。然而,添加到对象的新属性不会触发改变。在这种情况下,创建一个新的对象,其属性来自原始对象和mixin对象:

// instead of `Object.assign(this.someObject, { a: 1, b: 2 })`
this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })
nxagd54h

nxagd54h1#

下面是Vue.set的发布说明:
Vue不再使用$set和$delete方法扩展Object.prototype。这已经导致在某些条件检查中依赖于这些属性的库出现问题(例如Meteor中的minimongo)。使用新的全局方法Vue.set(object,key,value)和Vue.delete(object,key)代替object.$set(key,value)和object.$delete(key)。
因此,.$set过去在 * 所有 * 对象上可用-现在它只在视图模型本身上可用。因此,Vue.set现在用于那些您引用了React对象但没有引用它所属的视图模型的情况。

flseospp

flseospp2#

简单地说,两者是相同的,$set在组件(示例)内可用,如this.$set(),其中Vue.set是全局可用的静态方法。

this.$set(someobject, 'key', 'value')

Vue.set(someobject, 'key', 'value')
zvokhttg

zvokhttg3#

发现向.$set()对象添加多个属性一次即可,可能Vue首先将这些添加的属性收集到一个序列中,然后将这些序列应用于getter和setter;例如:

Vue.set(this.b,'first','first');
this.b.second = 'second';
this.b.third = 'third';
this.b.fourth = 'fourth';

X1 M1 N1 X也与X1 M2 N1 X一样具有React性

相关问题