Vue3 defineProps的使用

1.什么是defineProps

defineProps是Vue3中的一种新的组件数据传递方式,可以用于在子组件中定义接收哪些父组件的props。当父组件的props发生变化时,子组件也会随之响应。

2.如何使用defineProps?

在子组件中可以使用defineProps声明该组件需要接收的props,它需要传递一个包含props字段的对象,每个字段表示该props的默认值和类型等信息,示例如下:

import { defineComponent, defineProps } from 'vue'

const ChildComponent = defineComponent({
  props: defineProps({
    message: {
      type: String,
      default: ''
    },
    count: {
      type: Number,
      default: 0
    }
  }),
  template: `
    <div>
      <p>Message: {{ message }}</p>
      <p>Count: {{ count }}</p>
    </div>
  `
})

在父组件中,只需要通过props的方式向子组件传递对应的属性即可,如下:

<template>
  <div>
    <ChildComponent message="Hello, Vue3!" :count="10" />
  </div>
</template>

3.props类型

defineProps支持的主要类型有:

  • String
  • Number
  • Boolean
  • Object
  • Array
  • Function

同时也支持许多高级类型,比如,枚举类型,对象类型,联合类型等等。

import { defineProps } from 'vue'

    const props = defineProps({
      type:{
        type: String,
        validator: (value) => {
          return ['success', 'warning', 'danger', 'info'].includes(value)
        }
      },
      
      data:{
        type: [Array, Object],
        default: () => {
          return { name: 'jack', age: 20 }
        }
      }
    })

4.props的验证

我们可以对props进行验证,确保传入的值符合我们期望的值。

  • type:定义数据的类型
  • required:是否必须
  • default:默认值
  • validator:自定义验证
import { defineProps } from 'vue'

    const props = defineProps({
      count: {
        type: Number,
        required: true,
        default: 0,
        validator: (value) => {
          return value >= 0 && value <= 10
        }
      }
    })

5.props的命名风格

在Vue3中,props的命名风格默认采用驼峰命名风格(CamelCase)。但,如果组件props传入的命名是kebab-case风格时,我们可以通过配置globalProperties实现自动转换。

import { createApp } from 'vue'
    import App from './App.vue'
    
    const app = createApp(App)

    app.config.globalProperties.$options = {
    // 将组件的 props 的 kebab-case 转换为 camelCase
    // 例如 `some-prop` 将被转换为 `someProp`.
      convertProps: true
    }
    
    app.mount('#app')

6.总结

defineProps方法是Vue3的一个新特性,在组件化开发时可以方便的定义props并进行类型检查,以确保数据流的正确性和可靠性,同时也可以对props进行验证,确保传入的值符合我们期望的值。同时,在命名风格上也有很大的灵活性,可以通过配置实现不同风格的转换。

相关推荐

  1. Vue3 defineProps使用

    2024-07-15 02:02:01       21 阅读
  2. 学习Vue3defineProps方法

    2024-07-15 02:02:01       52 阅读
  3. [Vue3] - defineProps 接收从App.vue传来东西

    2024-07-15 02:02:01       44 阅读
  4. vue3defineProps详解

    2024-07-15 02:02:01       37 阅读
  5. vue3.3优化了defineProps和defineEmits写法

    2024-07-15 02:02:01       33 阅读
  6. Vue3】setup通过defineProps获取props为null

    2024-07-15 02:02:01       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 02:02:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 02:02:01       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 02:02:01       58 阅读
  4. Python语言-面向对象

    2024-07-15 02:02:01       69 阅读

热门阅读

  1. 数据结构第26节 广度优先搜索

    2024-07-15 02:02:01       18 阅读
  2. 共享云硬盘并发读写之集群文件系统

    2024-07-15 02:02:01       24 阅读
  3. Excel数据处理

    2024-07-15 02:02:01       20 阅读
  4. 虚拟专用网络(VPN)技术的研究与应用

    2024-07-15 02:02:01       21 阅读
  5. 0711,0712,0713 进程,进程之间的通信

    2024-07-15 02:02:01       17 阅读
  6. ZooKeeper实现分布式锁

    2024-07-15 02:02:01       18 阅读
  7. 了解微前端和qiankun

    2024-07-15 02:02:01       20 阅读
  8. Qt易错总结

    2024-07-15 02:02:01       23 阅读
  9. OpenAI 发布官方 .NET 库

    2024-07-15 02:02:01       20 阅读
  10. 技术探索之kotlin浅谈

    2024-07-15 02:02:01       20 阅读
  11. 企业网络安全工具整合与管控建议

    2024-07-15 02:02:01       21 阅读
  12. 构建图像金字塔遍历不同的大小

    2024-07-15 02:02:01       18 阅读