持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情juejin.cn/post/714765…
- 全局注册:
Vue.component()创建的组件是全局注册组件。全局注册不需要单独去声明,后缀名是vue的,直接写在main.js里,它自动就是全局注册组件。render:h=>h(App)h就是在做全局注册组件 - 局部注册:所有的子组件都是局部注册组件。
- 这主要看是怎么创建的组件。
- 把子组件渲染在父组件里,是在父组件的
<script/>标签里引入,必须要写在components属性里。
父组件向子组件传值:也是单向数据流:
在vue中,可以使用props向子组件传递数据。
传:
把数据作为子组件的属性传过去,写法和react里一模一样。如果传的是data里的数据,属性得用v-bind进行绑定
收:
先注册props,值是个数组,数组成员就是传过来的属性名。接收的其实也是一个对象,只不过是把对象进行了解构。
也可以限制传过来的值的数据类型。就把props的值设置为一个对象,键名是传过来的属性名,值是类型
- 父组件把传过去的值改了,那么子组件也会更新,而子组件向父组件传递数据,当数据更新之后,父组件不会更新,因为它不受子组件影响。
- 对于子组件来说,props在子组件中也是只读的。如果想改props的数据,那就像react一样,把数据放到data里,更改data。
- 或者定义一个计算属性,计算属性的返回值是基于props的数据进行更改的,只要props的数据更改,就会触发计算属性。
props验证
它除了可以验证类型之外,也可以验证传过来的数据是否为必填项,当不传值时是否有默认值
props:{
type:在这里指定类型,
requires:true,是否为必填项
default:在这里设置默认值
}
default的值可以写成一个函数,只有当默认值是个数组或者对象的话就写成函数,并把默认值return出去。
- 很多时候设置了默认值,就不设置必填项了,没必要。
- 父向更深层子组件传的时候,只能用props一层一层向下传递,或者使用订阅的方式。(目前还没有涉及)