Vue中的props详解

最基础和最常用的用法:

子组件中:

 App.vue主组件中:

  const player1 = reactive({
    name: "梅西",
    img: "/images/flowers.png",
    rate: 1,
    hot: 433760
  })
  const player2 = reactive({
    name: "梅西",
    img: "/images/flowers.png",
    rate: 1,
    hot: 433760
  })
  const team1 = reactive({
    name: "法国队",
    img: "/images/flowers.png",
    rate: 1,
    hot: 451511
  })

 用法简单易懂!

高级用法:

 

 

对于第一个和第二个 即count和obj 我们直接设置Number 和 Object 用处不大,只是做一个简单的校验,不会报错,但是会警告;而对于第三个maxLength 我们是通过一个对象来校验数据的合法性!!这样的话就会有严格性的数据校验了!!对于是通过函数判断是否合法的 就看返回值的bool类型了 

其实这些高级的用法都只是进行数据合法性检验而已

然后 一般在开发过程中才会常用这个数据合法性检验  上线后一般会常用的可能就是其中的default 设置默认值的功能了

 

 除了boolean类型的所有的未传递的可选的prop的值都会被写成undifined

如下:如果写了一个boolean类型的变量  那么默认值为false 如果要改的话  可以写default为undifined

 

### Vue.jsProps 的详细用法与解析 #### 1. Props 的基本概念 在 Vue.js 中,组件之间的通信是通过 `props` 实现的。`props` 是子组件接收父组件数据的一种方式,可以看作是组件的参数[^1]。这些参数由父组件传递给子组件,并且在子组件中通过 `props` 选项进行定义和接收。 #### 2. Props 的定义与使用 `props` 的定义可以通过以下几种方式进行: - **基础类型检查**: 子组件可以通过简单的类型声明来验证传入的数据类型。例如: ```javascript props: { propA: Number } ``` 这里 `propA` 被定义为一个 `Number` 类型的数据[^3]。 - **多种可能的类型**: 如果某个 `prop` 可以接受多种类型的值,则可以将其定义为一个数组: ```javascript props: { propB: [String, Number] } ``` 这表示 `propB` 可以是字符串或数字[^2]。 - **必填的属性**: 如果某个 `prop` 是必须的,可以通过设置 `required` 属性为 `true` 来强制要求: ```javascript props: { propC: { type: String, required: true } } ``` 这样,如果父组件没有传递 `propC`,Vue 会抛出警告[^3]。 - **带有默认值的属性**: 如果某个 `prop` 没有被父组件传递,可以为其设置默认值: ```javascript props: { propD: { type: Number, default: 100 } } ``` 当 `propD` 没有被传递时,其默认值为 `100`。 - **对象或数组的默认值**: 对于对象或数组类型的 `prop`,默认值必须通过工厂函数返回: ```javascript props: { propE: { type: Object, default: function () { return { message: 'hello' } } } } ``` 这是为了避免多个实例共享同一个默认对象或数组。 - **自定义验证函数**: 可以为 `prop` 定义一个验证函数,确保传入的值符合特定规则: ```javascript props: { propF: { validator: function (value) { return ['success', 'warning', 'danger'].indexOf(value) !== -1; } } } ``` 这里 `propF` 的值必须是 `'success'`、`'warning'` 或 `'danger'` 中的一个[^2]。 #### 3. Props 的校验机制 Vue 在组件初始化时会对 `props` 进行校验。校验过程包括遍历 `propsOptions` 并调用 `validateProp(key, propsOptions, propsData, vm)` 方法来确认传入的数据是否符合定义的规范[^5]。如果校验失败,Vue 会在开发环境中输出警告信息。 #### 4. 示例代码 以下是一个完整的父子组件通信示例: ```html <div id="app"> <parent></parent> </div> <script> var childNode = { template: `<div>{{ forChildMsg }}</div>`, props: { forChildMsg: { type: Number, required: true } } }; var parentNode = { template: ` <div class="parent"> <child :for-child-msg="msg"></child> </div> `, components: { child: childNode }, data() { return { msg: 123456 }; } }; new Vue({ el: "#app", components: { parent: parentNode } }); </script> ``` 在这个例子中,`parentNode` 将 `msg` 作为 `prop` 传递给 `childNode`,并且 `childNode` 对 `forChildMsg` 进行了类型和必填性的校验[^4]。 #### 5. 注意事项 - 父组件传递的 `props` 是单向绑定的,这意味着父组件的数据变化会触发子组件更新,但子组件不能直接修改 `props` 的值[^1]。 - 如果需要在子组件中修改 `props` 的值,应该创建一个局部变量并将其与 `props` 值同步[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值