Vue的props组件详解

const props = defineProps({
  name: String,
});

String 是在 defineProps() 函数中用来声明 name prop 的类型,表示 name 必须是字符串类型。如果父组件没有传入 name 或传入的 name 不是字符串类型,那么就会产生类型验证错误。

defineProps() 函数支持的数据类型除了 String,还包括以下几种:

  • Number:数字类型,可以是整数或浮点数。
  • Boolean:布尔类型,值为 true 或 false。
  • Object:对象类型,可以是纯粹的对象、函数或数组等。
  • Array:数组类型,可以是任何类型的项组成的数组,也可以是多维数组。
  • null:强制要求 prop 的值必须为 null。
  • undefined:强制要求 prop 的值必须为 undefined。
  • 自定义类型:你可以传递一个自己定义的构造函数,用于验证 prop 的类型是否正确。

此外,还有一些常用的验证规则:

  • required:布尔类型,指定该 prop 是否必须传入。
  • default:设置默认值,在父组件未传入时会使用该值。
  • validator:传入一个自定义的验证函数,用于验证 prop 是否合法。

例如:

const props = defineProps({
  age: {
    type: Number,
    default: 18,
    validator: (value) => value > 0 && value < 120,
  },
  isVisible: {
    type: Boolean,
    default: true,
  },
  person: {
    type: Object,
    default: () => ({ name: 'Tom', age: 20 }),
  },
});

在上面的例子中,我们声明了三个 prop:ageisVisibleperson。其中,age 是数字类型,必须为正整数且不能超过 120 岁;isVisible 是布尔类型,如果父组件没有传入,则默认为 true;person 是对象类型,如果父组件没有传入,则默认为 { name: 'Tom', age: 20 }

总之,在定义 props 时,我们需要考虑 props 的类型、是否必须、默认值和验证规则等,以及如何在组件内部使用这些 props。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3 提供了多种组件通信的方法,包括 Props、事件、Provide/Inject、$attrs/$listeners、Ref、Custom Events 等。下面我会逐一详细介绍这些方法。 1. Props:通过向子组件传递属性值来实现父子组件之间的通信。父组件可以通过 props 属性将数据传递给子组件,并在子组件中使用。子组件通过 props 接收父组件传递的数据,并进行相应的处理。 2. 事件:父组件可以通过自定义事件的方式向子组件传递数据。子组件通过 $emit 方法触发事件,并将数据作为参数传递给父组件。父组件通过在子组件上监听自定义事件,并在事件处理函数中接收子组件传递的数据。 3. Provide/Inject:父组件可以通过 provide 方法提供数据,然后在子组件中通过 inject 方法注入数据。这种方式可以实现跨层级的组件通信,但是不推荐在大型项目中过度使用。 4. $attrs/$listeners:$attrs 用于获取父组件传递给子组件的非 prop 属性,$listeners 用于获取父组件传递给子组件的事件。这两个属性可以使得子组件可以接收父组件的所有属性和事件,从而简化了父子组件之间的通信。 5. Ref:Ref 是一个特殊的对象,可以被用于在组件之间共享可变的状态。通过 ref 函数创建一个 ref 对象,并将其传递给子组件。子组件可以通过 .value 来访问和修改 ref 对象的值。 6. Custom Events:在 Vue 3 中,自定义事件可以通过创建一个新的事件实例,并使用 $on 和 $emit 方法进行监听和触发。这种方法可以实现更灵活的组件通信方式。 以上就是一些 Vue 3 中常用的组件通信方法。根据具体的场景和需求,选择合适的方法来实现组件之间的通信。希望能对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值