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 + SpringBoot实现离线MP3转文字的具体方案

    基于Vue + SpringBoot实现离线MP3转文字的具体方案

    本文介绍了一个基于Vue.js和SpringBoot的离线MP3转文字方案,使用Vosk作为语音识别引擎,支持多种语言和格式,前端实现文件上传和进度显示,后端处理音频文件并调用语音识别引擎,需要的朋友可以参考下
    2026-03-03
  • 深入理解vuex2.0 之 modules

    深入理解vuex2.0 之 modules

    本篇文章主要介绍了vuex2.0 之 modules,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 一文搞懂Vue3中toRef和toRefs函数的使用

    一文搞懂Vue3中toRef和toRefs函数的使用

    这篇文章主要为大家介绍了Vue3中toRef和toRefs函数的使用方法,文中通过示例为大家进行了详细的讲解,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-07-07
  • vue实现前端按钮组件权限管理

    vue实现前端按钮组件权限管理

    这篇文章主要为大家介绍了vue实现前端按钮组件权限管理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • vue axios请求拦截实例代码

    vue axios请求拦截实例代码

    axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端.这篇文章主要介绍了vue/axios请求拦截的相关知识,需要的朋友可以参考下
    2018-03-03
  • vue 无法覆盖vant的UI组件的样式问题

    vue 无法覆盖vant的UI组件的样式问题

    这篇文章主要介绍了vue 无法覆盖vant的UI组件的样式问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • Vue.js中的全局错误处理函数errorHandler用法

    Vue.js中的全局错误处理函数errorHandler用法

    这篇文章主要介绍了Vue.js中的全局错误处理函数errorHandler用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 基于vue封装一个安全键盘组件

    基于vue封装一个安全键盘组件

    大部分中文应用弹出的默认键盘是简体中文输入法键盘,在输入用户名和密码的时候,如果使用简体中文输入法键盘,用户的输入记录会被缓存下来所以我们需要一个安全键盘,本文给大家介绍了如何基于vue封装一个安全键盘组件,需要的朋友可以参考下
    2023-12-12
  • 详解从Vue.js源码看异步更新DOM策略及nextTick

    详解从Vue.js源码看异步更新DOM策略及nextTick

    本篇文章主要介绍了从Vue.js源码看异步更新DOM策略及nextTick,具有一定的参考价值,感兴趣的小伙伴们可以参考一
    2017-10-10
  • 用vue写一个日历

    用vue写一个日历

    这篇文章主要介绍了如何利用vue写一个日历,帮助大家更好的理解和学习vue,感兴趣的朋友可以了解下
    2020-11-11

最新评论