vue的props为什么是个对象呢,而不是一个函数,是因为vue的单向数据流,让他不能修改,或者说修改的时候会提示,是这样的原因嘛
因为同一组件的不同实例不会因为共享 props
而相互影响,那就让他们共享得了,省点内存。data
就不一样,共享 data
之后就会相互影响。
其实 Vue
也可以采用别的预处理方式,把用对象的 data
做到各实例互不影响,但至于大佬们为什么没这么做,而是让开发者传入初始化函数来隔离影响,也许是考虑到 data
有时候也要共享吧,不得而知。。。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
那想一想,他为什么就不能是对象呢?
无论是data还是props、watch、computed等,都是需要的一个对象,那为什么还要多此一举在外面套一层函数呢(没错,就是点名data的)?至于data为什么需要是一个函数,看你问题估计你也知道,就是因为组件复用引起的数据复用问题。
那么watch、computed有这个问题吗,并没有,props呢?不能说没有,但是大部分情况下是没有,因为初始化props是取了props的键值绑定到一个新的对象上,而props的值几乎都来自于父元素,即使是数据存在复用情况也是我们人为选择的。
那刚才为什么说大部分情况下,因为还有一种情况,就是props使用的是默认值,而这个默认值是一个对象或数组的时候,这时候父组件都不传值,那子组件就存在复用的问题了,但是对于这种情况,vue也有明确的规定,必须使用函数。