Vue3之defineProps、defineEmits和defineExpose的使用及说明

 更新时间:2025年10月11日 16:52:40   作者:样子2018  
文章介绍了Vue中defineProps、defineEmits和defineExpose的用途和作用,defineProps用于在子组件中定义类型安全的props,defineEmits允许子组件向父组件传递事件

一、使用说明

  • defineProps 供了一种更加明确和类型安全的方式来定义子组件的 props,使得子父组件之间的数据传递更加清晰和可维护。
  • defineEmits 实现子组件向父组件传递数据或事件。
  • defineExpose 明确要暴露出去的属性和方法,使得父组件可以通过ref访问子组件的这些属性和方法,必须在变量和方法声明定义之后使用。

二、简单示例

  • Test.vue
<template>
    <div>
        <p>{{msg}} - {{exposeStr}} - {{count}}</p>
        <button @click="_click">set msg</button>
        <button @click="count++">加</button>
        <button @click="count--">减</button>
    </div>
</template>

<script setup>
    import {
        ref
    } from 'vue'
    
    const exposeStr = ref('')
    const count = ref(0)
    const open = () => {
        console.log('this is a open function')
    }
    
    const emit = defineEmits(['setMsg'])
    
    const props = defineProps({
        msg: {
            type: String,
            default: 'this is a test component'
        }
    })
    
    const _click = () => {
        emit('setMsg', {msg: props.msg})
    }
    
    defineExpose({
        exposeStr,
        open
    })
</script>

<style>
    
</style>
  • App.vue
<script setup>
    import Test from './components/Test.vue'

    import {
        ref
    } from 'vue'
    
    const detail = ref('')
    const setMsg = (val) => {
        detail.value.exposeStr = "set expose msg"
        detail.value.open()
        console.log(val)
    }
</script>

<template>
    <Test ref="detail" msg="this is a test component" @setMsg="setMsg"></Test>
</template>

<style>

</style>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • VUE UPLOAD 通过ACTION返回上传结果操作

    VUE UPLOAD 通过ACTION返回上传结果操作

    这篇文章主要介绍了VUE UPLOAD 通过ACTION返回上传结果操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • vue中的加密方式总结

    vue中的加密方式总结

    这篇文章主要为大家详细介绍了vue中常见的加密方式实现,例如js-base64、crypto-js、jsencrypt、bcryptjs,文中的示例代码讲解详细,需要的小伙伴可以参考一下
    2023-11-11
  • vue中post请求以a=a&b=b 的格式写遇到的问题

    vue中post请求以a=a&b=b 的格式写遇到的问题

    这篇文章主要介绍了vue中post请求以a=a&b=b 的格式写遇到的问题,需要的朋友可以参考下
    2018-04-04
  • Vite代理如何解决跨域问题详解

    Vite代理如何解决跨域问题详解

    跨域是指浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制,下面这篇文章主要给大家介绍了关于Vite代理如何解决跨域问题的相关资料,需要的朋友可以参考下
    2023-03-03
  • 尤大大新活petite-vue的实现

    尤大大新活petite-vue的实现

    打开尤大大的GitHub,发现多了个叫 petite-vue 的东西,Vue3 和 Vite 还没学完呢,又开始整新东西了?本文就来介绍一下
    2021-07-07
  • Vue自定义组件双向绑定实现原理及方法详解

    Vue自定义组件双向绑定实现原理及方法详解

    这篇文章主要介绍了Vue自定义组件双向绑定实现原理及方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Vue2.X和Vue3.0数据响应原理变化的区别

    Vue2.X和Vue3.0数据响应原理变化的区别

    这篇文章主要介绍了Vue2.X和Vue3.0数据响应原理变化的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • vue中的v-slot指令使用

    vue中的v-slot指令使用

    在Vue中, v-slot 指令用于定义插槽的模板内容,v-slot 指令可以用于标签或组件标签上,以便在子组件中使用插槽,这篇文章主要介绍了vue v-slot指令,需要的朋友可以参考下
    2023-08-08
  • 使用异步组件优化Vue应用程序的性能

    使用异步组件优化Vue应用程序的性能

    这篇文章主要介绍了使用异步组件优化Vue应用程序的性能,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • Vue通过js控制css变量一键修改全局样式的完整过程

    Vue通过js控制css变量一键修改全局样式的完整过程

    这篇文章主要介绍了Vue通过js控制css变量一键修改全局样式的完整过程,结合ElementUI、vuex和cookie保存用户设置,确保表格字体随滚动条变化且新页面同步生效,提升样式维护灵活性,需要的朋友可以参考下
    2025-05-05

最新评论