当前位置: 首页 > news >正文

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,你可以选择性地暴露需要被外部访问的属性或方法。

关键点说明

  1. 仅暴露显式声明的属性

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

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

      typescript

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

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

应用场景

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

注意事项

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

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

http://www.lqws.cn/news/447715.html

相关文章:

  • 不同系统修改 Docker Desktop 存储路径(从C盘修改到D盘)
  • 解锁微服务潜能:深入浅出 Nacos
  • 蜻蜓Q系统的技术演进:从Laravel 6到Laravel 8的升级之路-优雅草卓伊凡
  • C# winform教程(二)----GroupBox
  • ROS学习之服务通信
  • 【AI编程】第3期,针对AI生成的改枪码列表创建对应的数据库表
  • AWS CloudFormation深度解析:构建现代云原生应用基础设施
  • SpringBoot扩展——发送邮件!
  • Spring MVC参数绑定终极手册:单多参对象集合JSON文件上传精讲
  • 网络编程及原理(五)
  • Kotlin 2.6 猜数小游戏
  • AI免费工具:promptpilot、今天学点啥、中英文翻译
  • WSL 安装使用和常用命令
  • 设计模式精讲 Day 7:桥接模式(Bridge Pattern)
  • OpenAI 公布《走向理解与预防失准泛化:由“角色特征”驱动的突现性失准》研究总结
  • 用“Gemini 2.0 Flash Preview Image Generation”模型修改图片,有哪些常用的提示词和方法
  • uni-app项目实战笔记16--实现头部导航栏效果
  • C++ inline变量
  • 记录存储的使用
  • MySQL 的 WITH ROLLUP 功能
  • LLM大模型应用监控---LangChain接入LangFuse进阶篇
  • Java Map 深度解析
  • 垃圾收集器
  • 【Wi-Fi天气时钟】前置知识合集
  • 硬件-DAY04(ds18b20、ARM内核)
  • 《二叉搜索树》
  • 【数字人开发】Unity+百度智能云平台实现短语音文本识别功能
  • 主体和债项均为“AAA”等级 海尔消金发行10亿金融债
  • 在 Windows 上使用 Docker Desktop 快速搭建本地 Kubernetes 环境(附详细部署教程)
  • 如何在 Pop!_OS 或 Ubuntu Linux 上安装 Dash to Dock