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 Dialog弹窗诟病

    教你轻松解决Vue Dialog弹窗诟病

    弹窗经常被使用在一些表单的增删改查啊,或者弹出一些提示信息等等,这篇文章主要给大家介绍了关于Vue Dialog弹窗诟病解决的相关资料,需要的朋友可以参考下
    2023-01-01
  • axios异步提交表单数据的几种方法

    axios异步提交表单数据的几种方法

    这篇文章主要给大家介绍了关于axios异步提交表单数据的几种方法,文中通过示例代码介绍的非常详细,对各位大家学习或者使用axios具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • webpack+vue+express(hot)热启动调试简单配置方法

    webpack+vue+express(hot)热启动调试简单配置方法

    今天小编就为大家分享一篇webpack+vue + express (hot) 热启动调试简单配置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • vue移动端的左右滑动事件详解

    vue移动端的左右滑动事件详解

    这篇文章主要为大家详细介绍了vue移动端的左右滑动事件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • vuejs对接后端踩过的坑记录

    vuejs对接后端踩过的坑记录

    这篇文章主要介绍了vuejs对接后端踩过的坑记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • vue如何使用formData传递文件类型的数据

    vue如何使用formData传递文件类型的数据

    这篇文章主要介绍了vue如何使用formData传递文件类型的数据问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Vue enter回车导致页面刷新问题及解决

    Vue enter回车导致页面刷新问题及解决

    这篇文章主要介绍了Vue enter回车导致页面刷新问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Vue3+Vue Router实现动态路由导航的示例代码

    Vue3+Vue Router实现动态路由导航的示例代码

    随着单页面应用程序(SPA)的日益流行,前端开发逐渐向复杂且交互性强的方向发展,在这个过程中,Vue.js及其生态圈的工具(如Vue Router)为我们提供了强大的支持,本文将介绍如何在Vue 3中使用Vue Router实现动态路由导航,需要的朋友可以参考下
    2024-08-08
  • Vue+Vux实现登录功能

    Vue+Vux实现登录功能

    这篇文章主要介绍了Vue+Vux实现登录功能,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • websocket+Vuex实现一个实时聊天软件

    websocket+Vuex实现一个实时聊天软件

    这篇文章主要利用websocked 建立长连接,利用Vuex全局通信的特性,以及watch,computed函数监听消息变化,并驱动页面变化实现实时聊天,感兴趣的可以了解一下
    2021-08-08

最新评论