vue3 props

props用了这么久了,才发现原来它既可以声明类型,又可以设置为必传,以前的工作中用的并不是很规范。
首先说一下命名方式,一共有两种,kebab-case和camelCase,前者跟HTML属性对齐,后者符合JS规范,是合法标识符,咋用都行。

  • 普通声明:
    • 组合式API:
      import defineProps form 'vue'
      const props = defineProps(['foo'])
    • 选项式API:
      props: ['foo']
  • 带类型
    • 组合式API:
      defineProps({ foo: String })
    • 选项式API:
      props: { foo: String }
  • 类型校验
    • 组合式API
      defineProps({ propA: [String, Number] }) // Stirng Number 两种类型
      defineProps({ propA: { type: String, required: true } }) // 必传且类型为String
      defineProps({ propA: { type: String, default: 'aaa' } }) // 类型为String, 默认值为'aaa'
      defineProps({ propA: { validator: (value) => ['success', 'warning', 'danger'].includes(value) } }) // 校验自定义success warning danger三种类型
      props遵循单向绑定原则,props因父组件的更新而变化,新的变化会传递到子组件,但是子组件如果修改了父组件的状态,是不会逆向传递的,而且修改的时候vue会抛出警告。不过由于引用类型的数据是传地址而非传值,所以当prop为引用类型的时候,修改元素父元素是可以获取到更新后的内容的,不过这样很损耗性能,得不偿失,更推荐emit
      另一个比较特殊的是当实用一个对象去绑定多个prop时,可以使用没有参数的v-bind去绑定:
      const post = { propA: 'aaa', propB: 'bbb' }
      <SonComponent v-bind="post" />
      等价于
      <SonComponent :propA="post.propA" :propB="post.propB" />
  • 一些细节
    • 除了Boolean,其他的prop如果定义了但是没有赋值的话,默认是undefined,而Boolean是false
    • 有default的时候,默认是default的值,不是undefined或者false
    • 不设置required: true的话,默认是可以不传的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值