0

这听起来可能微不足道,但事实并非如此。所以总结一下:

  1. 我们有一个存储在数据中的对象数组(最初是空的)。
  2. 创建组件时,我们通过自定义结构方法将一些对象添加到数组中。
  3. Fabric 方法接受基础对象并使用一些额外的道具对其进行扩展。
  4. Fabric 方法添加的道具之一是对数据的引用(this.foo)。

问题:生成的对象不是反应性的,也不会对this.foo变化做出反应。

演示:https ://codesandbox.io/s/vigilant-framework-47me6?fontsize=14&hidenavigation=1&theme=dark

到目前为止我已经尝试过:

  1. 使用 hack 返回 newVue(...)以使对象具有反应性(https://github.com/vuejs/vue/issues/2660)。
  2. 用于在 fabric方法$set中设置附加属性。

所以问题是:我们如何让对象反应?

PS我知道使用观察者/计算是选项,但在这种情况下不是。我希望对象具有反应性,而不是手动更新整个对象数组。

4

1 回答 1

1

好吧,问题是当你这样做时

{ foo: this.foo }

您只是将存储在this.foo中的实际值传递给新对象 foo 属性,该属性在实例化时为 0,这就是 javascript 处理原始值的方式。

如果您不想使用计算属性或观察者,您可以使用对象而不是通过引用而不是按值分配的原始值。

所以你可以像这样在数据对象中定义你的 foo 属性:

foo: {val: 0}

像这样在 addedProps 中分配您的值

{foo: this.foo}

并像这样增加价值

setInterval(() => this.foo.val++, 250);

这是您使用上述https://codesandbox.io/s/vue-reactive-object-ybji5修改的代码

谢谢,

于 2020-02-01T16:28:32.303 回答