vue3 defineExpose的使用及应用场景分析

 更新时间:2025年06月20日 09:46:10   作者:我在北京coding  
Vue3中defineExpose用于向父组件暴露子组件的属性和方法,尤其在script setup语法中,需显式声明以实现组件间交互,可控制暴露内容,避免过度暴露,同时注意响应式数据解包与测试影响,本文给大家介绍vue3 defineExpose的使用,感兴趣的朋友一起看看吧

子组件

//子组价
<template>
	<view class="box">子组件num值:{{num}}</view>
</template>
<script setup>
	import {ref} from "vue";
	const num=ref(100);
    const fn = ()=>{
     console.log('我是方法');
    }
	defineExpose({
		num,
        fn
	})
</script>

父组件

//父组价
<template>
	<view>
		<child-defineExpose ref="child"></child-defineExpose>
	</view>
</template>
<script setup>
	import {onMounted, ref} from "vue";
	const child=ref(null);
	onMounted(()=>{
		console.log(child.value.num,child.value.fn())
	})
</script>

简介:

在 Vue 3 的组合式 API 中,defineExpose 是一个用于向父组件暴露内部属性和方法的宏。这在使用 <script setup> 语法时特别有用,因为默认情况下,使用 <script setup> 的组件是封闭的,即父组件无法访问子组件的内部状态。通过 defineExpose,你可以选择性地暴露需要被外部访问的属性或方法。

关键点说明

  • 仅暴露显式声明的属性

    • 未在 defineExpose 中列出的属性和方法对父组件不可见。
    • 例如,上面的 message 属性未被暴露,父组件无法访问。
  • 类型支持(TypeScript)

可以通过泛型参数为暴露的属性和方法提供类型定义:

typescript

defineExpose<{
  count: number;
  increment: () => void;
}>();
  • 与非 <script setup> 组件的区别

    • 在普通的 export default 组件中,直接通过 this 暴露属性和方法,无需 defineExpose

应用场景

  • 父组件需要控制子组件的状态(如获取表单组件的值、触发子组件的动画)。
  • 封装可复用组件时,明确暴露可被外部调用的 API。

注意事项

  • 避免过度暴露:仅暴露真正需要被外部访问的属性和方法,保持组件的封装性。
  • 响应式问题:暴露的 ref 在父组件中访问时会自动解包(即直接访问 .value)。
  • 测试考量:过度依赖组件间的直接引用可能导致测试困难,优先考虑通过事件或状态管理共享数据。

通过 defineExpose,你可以在保持 Vue 3 组合式 API 简洁性的同时,灵活地实现组件间的交互。

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

相关文章

  • vue中使用AJAX实现读取来自XML文件的信息

    vue中使用AJAX实现读取来自XML文件的信息

    这篇文章主要为大家详细介绍了vue中如何使用AJAX实现读取来自XML文件的信息,文中的示例代码讲解详细,具有一定的借鉴价值,需要的小伙伴可以参考下
    2023-12-12
  • vue3之向echarts组件传值的问题分析

    vue3之向echarts组件传值的问题分析

    这篇文章主要介绍了vue3之向echarts组件传值的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Vue 图片监听鼠标滑轮滚动实现图片缩小放大功能(实现思路)

    Vue 图片监听鼠标滑轮滚动实现图片缩小放大功能(实现思路)

    其实想要实现功能很简单,就是在一张图片上监听鼠标滑轮滚动的事件,然后根据上滚还是下滚实现图片的缩放,这篇文章主要介绍了Vue 实现图片监听鼠标滑轮滚动实现图片缩小放大功能,需要的朋友可以参考下
    2023-03-03
  • Element input树型下拉框的实现代码

    Element input树型下拉框的实现代码

    这篇文章主要介绍了Element input树型下拉框的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • vue 实现数字滚动增加效果的实例代码

    vue 实现数字滚动增加效果的实例代码

    最近做了个项目需要做数字滚动增加的效果,刚开始接到这个项目还真是懵了,后来发现实现代码很简单的,下面小编给大家带来了vue 实现数字滚动增加效果的实例代码,需要的朋友参考下吧
    2018-07-07
  • Vue如何跨组件传递Slot的实现

    Vue如何跨组件传递Slot的实现

    这篇文章主要介绍了Vue如何跨组件传递Slot的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • element上传组件循环引用及简单时间倒计时的实现

    element上传组件循环引用及简单时间倒计时的实现

    这篇文章主要介绍了element上传组件循环引用及简单时间倒计时的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • vue实现简洁文件上传进度条功能

    vue实现简洁文件上传进度条功能

    这篇文章主要介绍了vue实现简洁文件上传进度条功能,实现原理是通过performance.now()获取动画的时间戳,用于创建流畅的动画,结合示例代码介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • vue 在服务器端直接修改请求的接口地址

    vue 在服务器端直接修改请求的接口地址

    这篇文章主要介绍了vue 在服务器端直接修改请求的接口地址的方法,帮助大家更好的理解和使用vue,感兴趣的朋友可以了解下
    2020-12-12
  • 基于vue实现分页组件的示例代码

    基于vue实现分页组件的示例代码

    分页组件是一种用户界面元素,用于在长列表或数据集中分割内容,分页组件是每个开发人员必须掌握的一个组件,广泛应用在各个场所,用以用户方便阅读等,本文就给大家介绍一下如何基于vue写出的分页组件,需要的朋友可以参考下
    2023-08-08

最新评论