Vue之Props

Vue.js进阶:Prop详解
本文深入探讨Vue.js中的Prop用法,包括基本写法、数据类型规定、静态与动态Prop传递、单向数据流原理及Prop类型检查。同时,讲解了非Prop属性如何被处理,为Vue开发者提供全面的组件间通信指南。

1. Prop写法

在DOM模板中使用时,要使用横线分隔,如下的 post-title

Vue.component('blog-post', {
  // camelCase in JavaScript
  props: ['postTitle'],
  template: '<h3>{{ postTitle }}</h3>'
})

<!-- kebab-case in HTML -->
<blog-post post-title="hello!"></blog-post>

2. 规定Prop数据类型

props的两种写法,后一种写法,可以规定数据的类型,不符合类型,vue会抛出警告

// 写法一
props: ['title', 'likes', 'isPublished', 'commentIds', 'author']

// 写法二
props: {
  title: String,
  likes: Number,
  isPublished: Boolean,
  commentIds: Array,
  author: Object,
  callback: Function,
  contactsPromise: Promise // or any other constructor
}

3. 传递静态或动态Props

除了string,还可传递任意类型的prop数据:number、boolean、array、object

// 静态的
<blog-post title="My journey with Vue"></blog-post>
// 动态的
<!-- Dynamically assign the value of a variable -->
<blog-post v-bind:title="post.title"></blog-post>

4. 单向数据流

父组件通过props向子组件传递数据,影响子组件状态

5. 对Prop进行类型检查

示例:

Vue.component('my-component', {
  props: {
    // Basic type check (`null` and `undefined` values will pass any type validation)
    propA: Number,
    // Multiple possible types
    propB: [String, Number],
    // Required string
    propC: {
      type: String,
      required: true
    },
    // Number with a default value
    propD: {
      type: Number,
      default: 100
    },
    // Object with a default value
    propE: {
      type: Object,
      // Object or array defaults must be returned from
      // a factory function
      default: function () {
        return { message: 'hello' }
      }
    },
    // Custom validator function
    propF: {
      validator: function (value) {
        // The value must match one of these strings
        return ['success', 'warning', 'danger'].indexOf(value) !== -1
      }
    }
  }
})

6. 非Prop的Attribute

一个非 prop 的 attribute 是指传向一个组件,但是该组件并没有相应 prop 定义的 attribute。
而这些 attribute 会被添加到这个组件的根元素上。

例如:

<bootstrap-date-input data-date-picker="activated"></bootstrap-date-input>
// 在该组件的props中并未接受这个data-date-picker,然后这个 data-date-picker="activated" attribute 就会自动添加到 <bootstrap-date-input> 的根元素上。

(完)

更多Vue文档解读:《Vue Doc 笔记》

### Vue 3 中 Props 的定义与接收 在 Vue 3 中,Props 是一种用于在组件间传递数据的有效机制。为了确保父子组件间的通信顺畅并提高代码质量,在定义和接收 Props 时需遵循特定的方法。 #### 使用 Options API 定义 Props 当采用传统的 Options API 方式创建组件时,可以通过 `props` 属性来指定要接收的数据项及其配置: ```javascript export default { props: { message: String, isActive: Boolean, items: Array } } ``` 此方法简单明了,适用于大多数场景下的属性声明[^1]。 #### 利用 Composition API 进行增强型 Prop 声明 对于更复杂的逻辑处理或者想要充分利用 Vue 3 新特性的情况下,则建议利用 Composition API 来定义 Props 。此时可以借助于 `defineComponent()` 函数以及 `withDefaults()` 辅助函数实现更加灵活且功能丰富的 Props 设置: ```typescript import { defineComponent, withDefaults } from 'vue'; interface MyComponentProps { title?: string; count: number; } const MyComponent = defineComponent({ props: withDefaults(defineProps<MyComponentProps>(), { title: 'Default Title', count: 0 }), }); ``` 上述例子展示了如何为 Props 设定默认值,并指定了预期接收到的数据类型,从而增强了应用的安全性和易维护性[^2]。 #### 接收来自父级的 Props 数据 一旦完成了 Props 的定义工作之后,在模板内部就可以像访问普通变量一样轻松获取这些传入的信息了;而在脚本部分则可以直接通过 `this.$props.xxx` 或者解构赋值的方式取得相应的内容以便进一步操作。 ```html <template> <div>{{ message }}</div> <!-- 直接显示 --> </template> <script setup lang="ts"> // 解构方式获得 prop const { message } = defineProps<{ message: string }>(); </script> ``` 以上就是关于 Vue 组件中如何高效地定义及接收 Props 的介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值