// If initially you have an object like this
state = {
obj:{
key1: ["dummy"]
}
};
// this will be reactive
state.obj.key1.push("dummy2");
// however if you add a new property to the object like this,
// then whatever you do with obj['key2'] will not be reactive
state.obj['key2'] = ["dummy"];
2条答案
按热度按时间qyswt5oh1#
这在文档的Change Detection Caveats部分有详细介绍。特别是对于数组:
由于JavaScript的限制,... Vue无法检测数组的以下更改:
1.当您直接设置带有索引的项目时,例如
vm.items[indexOfItem] = newValue
1.当你修改数组的长度时,例如
vm.items.length = newLength
数组原型方法的细节也在列表呈现部分中介绍:
Vue Package 了一个观察数组的mutation方法,这样它们也会触发视图更新。 Package 的方法是:
push()
pop()
shift()
unshift()
splice()
sort()
reverse()
所以问题的答案 * 是
state.array.push
React?* 是是。但是,请注意,上述警告仅适用于Vue 2。
Vue 3带来了a complete overhaul to the reactivity mechanism,从使用对象getter和setter切换到使用ES6 JavaScript特性
Proxy
。这允许更全面的对象更改监视,而用户需要担心的设置和警告更少。
cygmwpex2#
state.array.push(data)
正确。文档是这样说的: