Vue3 的 expose 介绍

2024-08-21 09:20

本文主要是介绍Vue3 的 expose 介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在 Vue 3 中,expose 是一个用于控制组件内部方法和属性暴露给父组件的新功能。这使得父组件可以调用子组件内部的方法或访问其数据,尤其在使用组合式 API(Composition API)时,这种能力非常有用。

1. 基本用法

expose 是一个函数,可以在 setup 函数中调用,用来暴露组件内部的属性和方法。这些被暴露的内容可以被父组件通过 ref 实例来访问和调用。

2. 举例 🌰

子组件

import { defineComponent, ref } from "vue";
export default defineComponent({setup(_, { expose }) {name: 'Child'// 定义组件内部的属性和方法const message = ref('I am child component message');const method = () => {console.log('I am child component method');}// 暴露这些属性和方法expose({message,method});return () => (<div style={{ color: 'red' }}>Child Component</div>);}
});

父组件

import { defineComponent, onMounted, ref } from "vue";
import Child from "./Child";export default defineComponent({setup() {name: 'Father'const childRef = ref();const childValue = ref('');// 方法来调用子组件的暴露方法function callChildMethod() {if (childRef.value) {childRef.value.method();}}// 读取子组件的暴露属性onMounted(() => {if (childRef.value) {childValue.value = childRef.value.message;}});return () => (<div><Child ref={childRef} /><button onClick={callChildMethod} style={{ border: 'none' }}>Call Child Method</button><p style={{ color: 'orange' }}>Child value: {childValue.value}</p></div>);}
});

浅浅解读一下

1)setup 是 Vue3 的组合式 API 中的一个函数,它用于定义组件的响应式状态、计算属性、方法等。它接收两个参数:props 和 context。其中,context 对象包含了 expose 和 emit 等函数。

2)在 setup 函数中调用 expose,传入一个对象,这个对象包含了希望暴露给父组件的属性和方法。父组件可以通过引用子组件实例来访问这些暴露的内容。

3. 注意事项

1、暴露的内容必须是响应式的

当使用 expose 时,需要确保暴露的数据是响应式的,以便父组件可以正确地感知到数据的变化。

2、暴露的接口仅在子组件中有效

只有暴露给父组件的内容可以通过 ref 访问,组件内部的其他内容(例如局部变量)不会被暴露。

3、避免滥用

虽然 expose 提供了很大的灵活性,但过度使用可能会导致组件之间的耦合度增加,从而影响组件的可维护性。尽量保持组件的接口简洁,避免暴露不必要的内容。

4、组合式 API 的用法

expose 与组合式 API 的 setup 函数配合使用。在 setup 中暴露的内容只能通过 expose 明确声明,而不是直接通过 this 访问。

5、expose 的时机

确保在 setup 函数中调用 expose 时,已经完成初始化,这样可以确保父组件在访问这些属性和方法时不会出现未定义的情况。

这篇关于Vue3 的 expose 介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1092757

相关文章

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

html 滚动条滚动过快会留下边框线的解决方案

《html滚动条滚动过快会留下边框线的解决方案》:本文主要介绍了html滚动条滚动过快会留下边框线的解决方案,解决方法很简单,详细内容请阅读本文,希望能对你有所帮助... 滚动条滚动过快时,会留下边框线但其实大部分时候是这样的,没有多出边框线的滚动条滚动过快时留下边框线的问题通常与滚动条样式和滚动行

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv

Pytorch介绍与安装过程

《Pytorch介绍与安装过程》PyTorch因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一,本文给大家介绍Pyto... 目录1、Pytorch介绍1.1、核心理念1.2、核心组件与功能1.3、适用场景与优势总结1.4、优

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

Spring Security介绍及配置实现代码

《SpringSecurity介绍及配置实现代码》SpringSecurity是一个功能强大的Java安全框架,它提供了全面的安全认证(Authentication)和授权(Authorizatio... 目录简介Spring Security配置配置实现代码简介Spring Security是一个功能强

使用Python和Tkinter实现html标签去除工具

《使用Python和Tkinter实现html标签去除工具》本文介绍用Python和Tkinter开发的HTML标签去除工具,支持去除HTML标签、转义实体并输出纯文本,提供图形界面操作及复制功能,需... 目录html 标签去除工具功能介绍创作过程1. 技术选型2. 核心实现逻辑3. 用户体验增强如何运行