vue的props为什么是个对象呢

vue的props为什么是个对象呢,而不是一个函数,是因为vue的单向数据流,让他不能修改,或者说修改的时候会提示,是这样的原因嘛

阅读 3.6k
3 个回答

那想一想,他为什么就不能是对象呢?

无论是data还是props、watch、computed等,都是需要的一个对象,那为什么还要多此一举在外面套一层函数呢(没错,就是点名data的)?至于data为什么需要是一个函数,看你问题估计你也知道,就是因为组件复用引起的数据复用问题。

那么watch、computed有这个问题吗,并没有,props呢?不能说没有,但是大部分情况下是没有,因为初始化props是取了props的键值绑定到一个新的对象上,而props的值几乎都来自于父元素,即使是数据存在复用情况也是我们人为选择的。

那刚才为什么说大部分情况下,因为还有一种情况,就是props使用的是默认值,而这个默认值是一个对象或数组的时候,这时候父组件都不传值,那子组件就存在复用的问题了,但是对于这种情况,vue也有明确的规定,必须使用函数。

image.png

你的props是指特定的prop还是指的prop这个集合?如果是props这个集合那显然就应该是个对象啊

因为同一组件的不同实例不会因为共享 props 而相互影响,那就让他们共享得了,省点内存。
data就不一样,共享 data 之后就会相互影响。
其实 Vue 也可以采用别的预处理方式,把用对象的 data 做到各实例互不影响,但至于大佬们为什么没这么做,而是让开发者传入初始化函数来隔离影响,也许是考虑到 data 有时候也要共享吧,不得而知。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题