Vue 3中的defineEmits()和defineProps()使用小结

 更新时间:2024年04月29日 10:15:39   作者:aike13ky  
defineProps()和defineEmits()是Vue 3中Composition API的重要组成部分,它们分别用于定义组件接收的属性和触发的事件,本文给大家介绍Vue 3中的defineEmits()和defineProps()解析,感兴趣的朋友跟随小编一起看看吧

前言 

       在Vue 3中,Composition API的引入为开发者带来了更灵活、更强大的组件开发体验。其中,defineEmits()defineProps()这两个函数在<script setup>语法中扮演着至关重要的角色,它们分别用于定义组件触发的事件和接收的属性,从而实现了组件间的有效通信。

一、defineProps():明确接收外部数据

        在Vue中,组件间的数据传递通常通过props实现。而在Vue 3的Composition API中,defineProps()函数则用于在<script setup>中声明组件期望接收的props。

        通过defineProps(),我们可以明确指定每个prop的类型、默认值以及验证函数,从而确保组件接收到的数据符合预期。这不仅提高了代码的可读性和可维护性,还为TypeScript用户提供了类型推导功能,进一步增强了代码的健壮性。

        通俗一点讲,它是用于声明组件期望从父组件接收的 props(属性)。这些 props 是父组件在使用子组件时通过属性绑定的方式传递的数据。

        当你在子组件中使用 defineProps 来声明 props 时,你实际上是在定义组件的接口,告诉 Vue 和其他开发者这个组件需要哪些 props,以及这些 props 的类型和可能的验证规则。这样,父组件就可以按照这些声明来传递相应的数据给子组件。

示例:

//子组件
<script setup>  
import { defineProps } from 'vue'  
const props = defineProps({  
  title: String,  
  isVisible: Boolean  
})  
</script>
//父组件
<template>  
  <MyComponent :title="myTitle" :isVisible="shouldShow" />  
</template>  
<script>  
import MyComponent from './MyComponent.vue'  
export default {  
  components: {  
    MyComponent  
  },  
  data() {  
    return {  
      myTitle: 'Hello from Parent',  
      shouldShow: true  
    }  
  }  
}  
</script>

        在这个例子中,父组件通过属性绑定 :title="myTitle" 和 :isVisible="shouldShow" 将数据传递给子组件 MyComponent。子组件中的 defineProps 声明确保了这些 props 的存在,并且它们可以在组件的模板或 setup 函数中被正确引用和使用。

二、defineEmits():定义组件触发的事件

        defineProps()相对应的是defineEmits(),它用于在<script setup>中声明组件可以触发的事件。通过定义事件,组件可以主动向父组件或其他监听者发送消息,从而实现组件间的通信。

        与defineProps()类似,defineEmits()也支持类型推导和验证功能。这意味着我们可以为事件定义类型,并在触发事件时进行参数验证,以确保数据的正确性和一致性。

        通俗一点来说,有时候,子组件需要告诉父组件某件事情发生了,比如用户点击了一个按钮,或者子组件内部的数据有了变化。这时,子组件就可以“发射”或“触发”一个事件,父组件则可以监听这个事件,并做出相应的反应。

代码示例:

<script setup>  
import { defineEmits } from 'vue'  
const emit = defineEmits(['update'])  
function increment() {  
  const count = /* 获取或计算当前计数 */;  
  emit('update', count + 1);  
}  
</script>  
<template>  
  <div>  
    <p>Count: {{ count }}</p>  
    <button @click="increment">Increment</button>  
  </div>  
</template>

        在这个例子中,我们使用了defineEmits()来声明了一个名为update的事件。当点击按钮时,increment()函数会被调用,它触发了一个update事件并传递了一个更新后的计数作为参数。父组件可以通过监听这个事件来接收这个计数,并据此更新自己的状态或执行其他操作。

三、总结

  defineProps()defineEmits()是Vue 3中Composition API的重要组成部分,它们分别用于定义组件接收的属性和触发的事件。通过这两个函数,我们可以实现组件间的清晰、明确的数据传递和通信,从而提高代码的可读性、可维护性和健壮性。无论是使用纯JavaScript还是TypeScript进行开发,它们都能为我们提供强大的类型推导和验证功能,帮助我们构建更加可靠和高效的Vue应用程序。

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

相关文章

  • vue中的render函数、h()函数、函数式组件详解

    vue中的render函数、h()函数、函数式组件详解

    在vue中我们使用模板HTML语法来组建页面的,使用render函数我们可以用js语言来构建DOM,这篇文章主要介绍了vue中的render函数、h()函数、函数式组件,需要的朋友可以参考下
    2023-02-02
  • vue3中的ref()详解

    vue3中的ref()详解

    ref对象可以通过.value属性进行修改,修改后的值也是响应式的,并且修改后会触发相关的副作用,这篇文章主要介绍了vue3中的ref(),需要的朋友可以参考下
    2023-05-05
  • vue报错Error:Cannot find module 'fs/promises'的解决方式

    vue报错Error:Cannot find module 'fs/promises'的解决方

    最近的项目需要用到vue/cli,但是用cnpm安装vue/cli的时候报错了,下面这篇文章主要给大家介绍了关于vue报错Error:Cannot find module 'fs/promises'的解决方式,需要的朋友可以参考下
    2022-11-11
  • vue实现给某个数据字段添加颜色

    vue实现给某个数据字段添加颜色

    这篇文章主要介绍了vue实现给某个数据字段添加颜色方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 关于vant的日历组件,在iPhonex上可选日期空白

    关于vant的日历组件,在iPhonex上可选日期空白

    这篇文章主要介绍了关于vant的日历组件,在iPhonex上可选日期空白,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue 禁止重复点击发送多次请求的实现

    vue 禁止重复点击发送多次请求的实现

    本文主要介绍了vue 禁止重复点击发送多次请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • vue中$set与$delete的使用及说明

    vue中$set与$delete的使用及说明

    这篇文章主要介绍了vue中$set与$delete的使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Vue中import from@符号指的是什么意思

    Vue中import from@符号指的是什么意思

    这篇文章主要介绍了Vue中import from@符号指的是意思,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Vue中组件递归及使用问题

    Vue中组件递归及使用问题

    这篇文章主要介绍了Vue中组件的递归和使用问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • 优化Vue template中大量条件选择v-if的方案分享

    优化Vue template中大量条件选择v-if的方案分享

    本文我们将给大家详细的讲解一下如何优化Vue template 中的大量条件选择v-if,文中通过代码示例介绍的非常详细,有详细的优化方案,感兴趣的朋友可以参考阅读下
    2023-07-07

最新评论