vue3中defineProps及使用方法详解

 更新时间:2024年03月25日 12:19:58   作者:Br不二  
defineProps是Vue3中的一种新的组件数据传递方式,可以用于在子组件中定义接收哪些父组件的props,这篇文章给大家介绍vue3中defineProps及使用方法详解,感兴趣的朋友跟随小编一起看看吧

vue3中defineProps详解

在Vue 3中,defineProps是一个新的API,用于在子组件中定义并接收来自父组件的props。这是Vue 3中组件数据传递方式的一种改进,使得props的声明和接收更加直观和明确。

使用方法

defineProps通常在<script setup>标签内使用,通过引入并调用defineProps函数来定义组件期望接收的props。每个prop都可以指定类型、默认值、是否必需等属性。

下面是一个简单的示例,展示了如何在Vue 3组件中使用defineProps

<script setup>
import { defineProps } from 'vue';
// 定义props
const props = defineProps({
  title: {
    type: String,
    required: true,
    default: 'Default Title'
  },
  count: {
    type: Number,
    default: 0
  }
});
</script>
<template>
  <div>
    <h1>{{ title }}</h1>
    <p>Count: {{ count }}</p>
  </div>
</template>

在这个例子中,我们定义了两个props:titlecounttitle是一个必需的字符串类型prop,而count是一个可选的数字类型prop,带有默认值0。在模板中,我们可以直接使用这些props。

原理

defineProps的原理主要基于Vue 3的响应式系统和组件系统。当你使用defineProps定义props时,Vue会创建一个响应式的代理对象,该对象包含了所有定义的props。这个代理对象允许你在组件内部访问和响应props的变化。

在组件的渲染过程中,Vue会收集模板中对props的依赖,并在props的值发生变化时重新计算并更新相关的DOM。这是通过Vue的响应式系统实现的,它能够在数据变化时自动触发组件的重新渲染。

此外,defineProps还提供了类型检查和验证的功能,确保传入的props符合组件的期望。如果传入的props不符合定义的类型或要求,Vue会在开发模式下发出警告,帮助开发者发现和修复问题。

总结起来,defineProps在Vue 3中提供了一种更加直观和明确的方式来定义和接收props,使得组件之间的数据传递更加清晰和可维护。同时,结合Vue的响应式系统,它还能够确保组件在props变化时能够自动更新和重新渲染。

补充:

Vue3中的defineProps方法

1.什么是defineProps

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

2.如何使用defineProps?

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

import { defineComponent, defineProps } from 'vue'
const ChildComponent =<strong> defineComponent</strong>({
  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进行验证,确保传入的值符合我们期望的值。同时,在命名风格上也有很大的灵活性,可以通过配置实现不同风格的转换。

参考---https://www.python100.com/html/YX519T8WHX57.html

参考---https://pythonjishu.com/kpcskqehplrtklq/

到此这篇关于vue3中defineProps详解的文章就介绍到这了,更多相关vue3 defineProps内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决vue项目报错webpackJsonp is not defined问题

    解决vue项目报错webpackJsonp is not defined问题

    下面小编就为大家分享一篇解决vue项目报错webpackJsonp is not defined问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • vue实现自定义树形组件的示例代码

    vue实现自定义树形组件的示例代码

    这篇文章主要介绍了vue实现自定义树形组件的示例代码,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • ElementUI Tag组件实现多标签生成的方法示例

    ElementUI Tag组件实现多标签生成的方法示例

    这篇文章主要介绍了ElementUI Tag组件实现多标签生成的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 浅谈Vue.js应用的四种AJAX请求数据模式

    浅谈Vue.js应用的四种AJAX请求数据模式

    本篇文章主要介绍了浅谈Vue.js应用的四种AJAX请求数据模式,本文将详细介绍在Vue应用程序中实现AJAX的四个方法,有兴趣的可以了解一下
    2017-08-08
  • vue axios 简单封装以及思考

    vue axios 简单封装以及思考

    axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端。这篇文章主要介绍了vue axios 简单封装以及思考 ,需要的朋友可以参考下
    2018-10-10
  • Vue中provide()函数和inject()函数高级用法及注意事项

    Vue中provide()函数和inject()函数高级用法及注意事项

    inject()是 Vue.js 中用于的核心函数,主要用于在组件树中provide(),它是 Vue 提供的一种种组件间通信方式,尤其适用于深层嵌套组件之间的数据传递,避免了传统“props 层层传递”的繁琐,下面给大家介绍Vue中provide()函数和inject()函数高级用法,感兴趣的朋友一起看看吧
    2025-08-08
  • Vue如何获取new Date().getTime()时间戳

    Vue如何获取new Date().getTime()时间戳

    在Web开发中,前端使用Vue.js获取的是毫秒级时间戳,而PHP后端则是秒级时间戳,处理此类问题时,需要将PHP的时间戳乘以1000转换为毫秒级,以保证数据的一致性和正确的逻辑判断
    2024-10-10
  • vue使用wavesurfer.js解决音频可视化播放问题

    vue使用wavesurfer.js解决音频可视化播放问题

    Wavesurfer.js是一款基于HTML5 canvas和Web Audio的声纹可视化插件,功能十分强大,在Vue框架中嵌入使用该插件,今天重点给大家介绍下vue使用wavesurfer.js解决音频可视化播放问题,感兴趣的朋友一起看看吧
    2022-04-04
  • 使用vue-router切换页面时实现设置过渡动画

    使用vue-router切换页面时实现设置过渡动画

    今天小编就为大家分享一篇使用vue-router切换页面时实现设置过渡动画。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • vue router路由嵌套不显示问题的解决方法

    vue router路由嵌套不显示问题的解决方法

    这篇文章主要为大家详细介绍了vue router路由嵌套不显示的问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下vue-router 路由嵌套不显示问题
    2017-06-06

最新评论