问题描述:为什么在vue组件中,我们的data属性必须是一个函数,new Vue()中的data除外,因为new Vue中只有一个data属性。
原因:因为我们能抽离出来的组件,肯定是具有复用性的,它在项目中会存在多个实例。如果data属性值是一个对象时,那么它所有的实例都会共享这些数据,这是很麻烦的事情,你不能确保你的所有实例中的属性值都不会重复。
我们的期望是,组件的每个实例都能独立的维护自己的数据。
我们都知道,在JavaScript中,函数具有独立作用域块的特点,外部是无法访问其内部的变量。
试想一下,如果我们组件中的data属性是一个函数,他的每个实例就会有自己的作用域空间,也就是独立的数据,每个实例之间不会相互影响。
所以,组件中的data属性必须是一个函数。
问题描述:为什么在vue组件中,我们的data属性必须是一个函数,new Vue()中的data除外,因为new Vue中只有一个data属性。原因:因为我们能抽离出来的组件,肯定是具有复用性的,它在项目中会存在多个实例。如果data属性值是一个对象时,那么它所有的实例都会共享这些数据,这是很麻烦的事情,你不能确保你的所有实例中的属性值都不会重复。我们的期望是,组件的每个实例都能独立的维护自己的数据。解决方案我们都知道,在JavaScript中,函数具有独立作用域块的特点,外部是无法访问其内
根
组件
的
data
可以是
函数
也可以是
对象
,不会产生数据污染
但是
组件
中
中
的
data
必须是一个
函数
,返回一个新的
对象
,如果
data
是一个普通的
对象
,所有用到这个
组件
的都引用的同一个
data
,就会造成数据污染。
不使用return包裹的数据会在项目的全局可见,会造成变量污染;使用return包裹后数据
中
变量只在当前
组件
中
生效,不会影响其他
组件
。 当一个
组件
被
定义
,
data
必须声明为返回一个初始数据
对象
的
函数
,因为
组件
可能被用来创建多个实例。如果
data
仍然是一个纯粹的
对象
,则所有的实例将共享引用同一.
分析
Vue.js
组件
中
的
data
为何是
函数
类型而非
对象
类型引言正文一、
Vue.js
中
data
的使用
要理解本篇文章,必须具备
JavaScript
中
对象
的概念,如果有想要深入了解的小伙伴,可以查看我之前剖析的js
中
对象
概念的一篇文章——充分了解
JavaScript
中
的
对象
,顺便弄懂你一直不明白的原型和原型链,如果没空看的小伙伴也没关系,我会尽可能用你们能懂的方式讲解。
本文很多地方会给新手讲解一些别的概念,懂了的小伙伴可以自行跳过,去看重要的部分。
一、
Vue.js
中
data
的使用
我们先来回顾一
为什么在 new
Vue
()
中
,
data
是可以作为一个
对象
进行操作的,然而在 component
中
,
data
只能以
函数
的形式存在,
不能
直接将
对象
赋值给它。
因为,
对象
是引用类型, return一个新
对象
, 就相当于申明了新的变量,相互独立的。而每个
组件
的
data
都是内存的同一个地址,如果不用function 返回,一个数据改变了其他也改变了, 所有实例的
data
都会一样。
javas...
vue
组件
为什么
data
是
函数
?
data
是一个
函数
时,每个
组件
实例都有自己的作用域,每个实例相互独立,不会相互影响。
date
写成
对象
形式, 每个
组件
的
data
都是内存的同一个地址,一个数据改变了其他也改变了。
为什么new
Vue
这个里面的
data
可以放一个
对象
?
因为这个类创建的实例是不会被复用。它只会new一次,不用考虑复用,所以放一个
对象
即可。
在这里插入代码片
以下引官网原文:当一个
组件
被
定义
,
data
必须声明为返回一个初始数据
对象
的
函数
,因为
组件
可能被用来创建多个实例。如果
data
仍然是一个纯粹的
对象
,则所有的实例将共享引用同一个数据
对象
!通过提供
data
函数
,每次创建一个新实例后,我们能够调用
data
函数
,从而返回初始数据的一个全新副本数据
对象
。
最近来面试的很多人。我都会问这个问题“
vue
中
,为什么
data
是一个方法返回一个
对象
,...
当
data
定义
为
对象
后,这就表示所有的
组件
实例共用了一份
data
数据,因此,无论在哪个
组件
实例
中
修改了
data
,都会影响到所有的
组件
实例。
组件
中
的
data
写成
一个
函数
,数据以
函数
返回值形式
定义
,这样每复用一次
组件
,就会返回一份新的
data
,类似于给每个
组件
实例创建一个私有的数据空间,让各个
组件
实例维护各自的数据。而单纯的
写成
对象
形式,就使得所有
组件
实例共用了一份
data
,就会造成一个变了全都会变的结果。