vuex 是 state.array.push 反应式的吗?

fog*_*ogx 8 javascript vue.js vuex

我对 JS 和 vue 有点陌生,我不太确定我是否正确理解了文档。它说:

由于现代 JavaScript 的限制(以及 Object.observe 的放弃),Vue 无法检测属性的添加或删除。由于 Vue 在实例初始化期间执行 getter/setter 转换过程,因此数据对象中必须存在一个属性,以便 Vue 转换它并使其具有反应性。

这是否也包括普通数组,或者数组中的元素在javascript中不算作“属性”吗?我希望对数组执行 state.array.push(data) 。这是正确的方法吗?

rol*_*oli 20

关于文档

由于 JavaScript 的限制,Vue 无法检测到数组的以下更改:

  1. 当您直接设置带有索引的项目时,例如 vm.items[indexOfItem] = newValue
  2. 当你修改数组的长度时,例如 vm.items.length = newLength

Vue 将在使用时保持反应性(数组更改检测):

  1. 推()
  2. 流行音乐()
  3. 转移()
  4. 取消移位()
  5. 拼接()
  6. 种类()
  7. 逆转()

所以这个问题的答案是 state.array.push 反应式?


Dan*_*Lee 6

state.array.push(data) 是正确的。

文档说的是:

// 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"];
Run Code Online (Sandbox Code Playgroud)