javascript - 如何让 Vue.js 对动态添加的数组属性的更改使用react?

标签 javascript vue.js vue-component object-properties vue-reactivity

在 Vue.js 中,我有一个数据对象,它具有动态添加/编辑的属性,这些属性本身就是数组。例如,该属性的开头如下:

data: function () {
    return {
        vals: {}
    };
}

随着时间的推移,通过各种按钮点击等,vals 可能如下所示(实际属性名称和值基于多种因素 100% 动态):

vals: {
    set1: [
        {
            prop1: 123,
            prop2: 'hello'
        },
        {
            prop1: 456,
            prop2: 'bye'
        }
    ],
    set2: [
        {
            prop3: 'Why?!',
            prop4: false
        }
    ]
}

随着数组属性(即 set1set2)的更改,我希望能够对这些更改使用react。

例如,我可能会在代码中执行以下操作:

var prop = 'set1';

this.vals[prop].push({
    {
        prop1: 789,
        prop2: 'hmmm...'
    }
});

但是,当我这样做时,组件没有更新(我猜是因为我将一个对象推到对象子数组的末尾;而 Vue.js 似乎没有跟踪这些更改)。

我已经能够通过在上述 push 之后执行 this.$forceUpdate(); 来强制组件使用react,但我想必须有一个当涉及到将对象推到对象子数组末尾时,让 Vue.js 使用react的更 Eloquent 方式。

有谁知道更好的方法来尝试实现我想要实现的目标?谢谢。

最佳答案

每当您向对象添加新属性或更改数组中的值时,都需要使用 Vue.set() .

Vue.set(this.vals, prop, [ /* ... */ ])

理想情况下,您应该预先定义所有属性,这样 Vue 就不必根据数据模型的形状使计算属性无效。即使您将它们设置为 null,您也应该尝试映射出您期望组件需要的所有属性。

此外,在第一个代码块中,return: 之后有一个冒号,它将计算为标签,这意味着您的数据函数不会返回任何内容。

关于javascript - 如何让 Vue.js 对动态添加的数组属性的更改使用react?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56192519/

相关文章:

javascript - 运行 npmserve 时收到错误消息模块构建失败(来自 ./node_modules/sass-loader/dist/cjs.js)

javascript - 无法从子组件获取在父组件上执行的方法

vue.js - vue2-google-maps 自定义样式

javascript - 使用javascript删除由复选框标记的html表格中的一行

javascript - extjs 中的 float 容器或组件不会触发事件

c# - 如何使用 ScriptSharp 动态生成 javascript?

javascript - Webpack 的定义插件 : variable is not defined

javascript - Vue.js 2/Javascript mouseover 方法在 mousein 和 mouseout 上应用事件

vue.js - vue-router this.$route.params 为空

javascript - html.erb 模板中的 v-model 呈现 function () { [native code] }