javascript - 我可以通过引用编辑vue数据吗?

标签 javascript vue.js reactive-programming

让我举个例子来解释我的问题。

示例:我有一个与此类似的人员类

class Person {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }

    celebrateBirthday() {
        console.log("Happy Birthday");
        this.age += 1;
    }
}

我像这样在 vue 中使用这个类

data() {
    return {
        person: new Person("Kireeti", 26)
    }
},
mounted() {
    this.person.celebrateBirthday();
}

通常,我们会这样做

mounted() {
    this.person.age += 1 
}

但出于显而易见的原因,我想在类里面这样做。这对我有用,因为对象有引用。但我想知道我可以这样做吗?

有人知道吗?

最佳答案

当从组件中操作对象时,如下所示:

data() {
    return {
        person: new Person("Kireeti", 26)
    }
},
mounted() {
    this.person.celebrateBirthday();
}

事实上,这种方式可以说比在组件中执行 this.person.age += 1 更好

原因是,虽然向 person.age 添加 1 年确实很简单,但其他对象可能具有更复杂的条件。也许您修改了代码,使 celebrateBirthday 有一些限制,或者对人员的状态(除了年龄)进行更多修改。

您绝对不想在 Vue 组件中处理该逻辑,因为其他组件也可能正在使用 Person 对象。将这种逻辑保留在类中似乎是更好的方法。

可能的注意事项

使用对象引用可能出错的事情都与 react 性有关。如果 Person 有一个 friends 数组,并且您的组件依赖于它的更改,例如:

<friend-component v-for="friend in friends" :data="friend" />

您需要小心并以 Vue can track 的方式修改内部人员 friends 数组。 。你不能依赖on Sets or Maps 。有some other limitations too 。另外,在观察对象变化时,您需要小心设置{deep: true}

但是,对于属于 Vue 组件或对象的变量来说,所有这些都是相同的:据我所知,基本上依赖对象引用没有问题。

关于javascript - 我可以通过引用编辑vue数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56270572/

相关文章:

javascript - 使用javascript将导航栏从不同的文件夹加载到html页面

javascript - Chrome 扩展 - 实现 channel

javascript - 从另一个调用方法时使用它

flask - 如何在 Vue 和 Flask 中使用 session ?

javascript - 如何在不刷新页面的情况下使用 Vue 切换按钮

javascript - 更改 "speed"几秒钟

javascript - 如何检查特定元素的 DOM 并创建新的 Vue 实例?

javascript - 从其他可观察对象切换 Rxjs 流

java - 在 IntelliJ IDEA 中调试 Java 期间生成的变量名称中的美元符号是什么意思?是闭包吗?

javascript - 什么是 "callback hell"以及 RX 如何以及为何解决它?