美文网首页
为什么在Vue的组件中data必须为一个函数?

为什么在Vue的组件中data必须为一个函数?

作者: e93a88ffeabd | 来源:发表于2018-03-09 09:26 被阅读0次

前言

在我们使用vue的时候,组件这个功能一定是大家都会去接触到的,这也是vue这个js框架的优势之一。但是在使用的时候我们会发现一个问题,在文档中作者明确地表明了data必须是函数,那么这是为什么呢?

原来是js的锅

我们知道,组件出现的目的就是为了把页面中的每一个部分都模块化,方便处理或复用。当一个组件被多次复用时,我们肯定希望组件中的数据是各自独立不受干扰的。但是由于js的特性所致,存储数据的对象是复杂数据类型,需要存放在堆中,对一个对象的引用其实只是对该对象地址的引用而已。那么这样就会造成一个情况,假如某个对象的引用修改了这个对象上某个属性的值,就会导致在这个对象的其他引用上的该属性的值也会随之发生改变,这并不是我们想要的结果。
举个例子:

var component = function() {};
component.prototype.data = {
  a: 'axx',
  b: 'bxx'
};
var test1 = new component();
var test2 = new component();
console.log(test1.data.a); //axx
console.log(test2.data.a); //axx
test1.data.a = 'xxx'
console.log(test1.data); //xxx
console.log(test2.data); //xxx

在上面的代码中,test1与test2都是component的实例,其实test1改变了component的data上面a的值,但是b并没有随着更改。可是再次打印的时候我们发现,b的值却也跟着变了

如何解决

var component = function() {
    this.data = this.data()
};
component.prototype.data = function (){
    return {
        a: 'axx',
        b: 'bxx'
    }
}
var test1 = new component(); //axx
var test2 = new component(); //axx
console.log(test1.data);
console.log(test2.data);
test1.data.a = 'xxx'
console.log(test1.data); //xxx
console.log(test2.data); //axx

如果我们使用调用函数返回值的方法,就可以确保每个实例所引用的data属性是各不相同的一份,从而不会发生自身数据被其他组件所干扰的情况,所以在vue中的data才会要求我们写成函数返回值的形式

相关文章

  • vue 中的 data 为什么是函数?

    new Vue() 实例中,data可以是直接是一个对象,为什么在vue组件中,data必须是一个函数呢?因为组件...

  • vue组件data为什么必须是函数?

    首先看个例子 在new vue()中,data可以直接是一个对象,为什么在vue组件中,data必须是一个函数呢?...

  • vue组件data为什么必须是函数

    首先看个例子 在new vue()中,data可以直接是一个对象,为什么在vue组件中,data必须是一个函数呢?...

  • Vue组件data必须是函数

    Vue组件data必须是函数 一、组件data() 函数 定义一个组件 注册组件Vue.component('cp...

  • 微信小程序和vue的区别

    数据类型 vue组件中data必须是函数 data(){return{}},new Vue中的选项可以是函数也可以...

  • 为什么vue中data必须是一个函数

    首次发表在个人博客 本篇文章从javascript原型链来解释为什么vue中data必须是一个函数 vue组件中的...

  • vue题库

    为什么vue组件中data必须是一个函数? 组件是可复用的,当复用组件时,由于数据对象指向的是同一个data对象,...

  • vue初级面试题

    1.在vue中,为什么 data必须是一个工厂函数而不能是一个对象。 在组件的复用中,如果data是一个对象的话,...

  • vue 组件中的data为什么是一个函数

    组件中 data 为什么是一个函数? 为什么组件中的 data 必须是一个函数,然后 return 一个对象,而 ...

  • 9道vue面试题

    2.VUE组件data为什么必须是函数 答:Vue组件可能存在多个实例,如果使用对象形式定义data,则会导致它们...

网友评论

      本文标题:为什么在Vue的组件中data必须为一个函数?

      本文链接:https://www.haomeiwen.com/subject/umbefftx.html