Vue3 SFC 和 TSX 方式调用子组件中的函数

基于TSX的Vue3组件开发技能 jsx的集成参考相关小节。本教程介绍tsx在vue组件开发中的使用技巧,作为大家学习和工作的参考指南。 阅读详情

在开发中会遇到这样的需求:获取子组件的引用,并调用子组件中定义的方法。如封装了一个表单组件,在父组件中需要调用这个表单组件的引用,并调用这个表单组件的校验表单函数或重置表单函数。要实现这个功能,首先要在子组件中暴露父组件需要调用的函数,然后去父组件中获取子组件的引用,最后通过子组件的引用调用子组件暴露的方法。

1 子组件暴露方法

1.1 SFC(.vue)暴露方法

在使用 .vue 定义的组件中,setup 中提供了 defineExpose() 方法,该方法可以将组件内部的方法暴露给父组件。

创建子组件 demo-component-sfc.vue:

<template>
  <el-button type="primary" @click="demoFun('child')">demo component sfc</el-button>
</template>

<script lang="ts" setup name="demo-component-sfc">
const demoFun = (str: string) => {
  console.log('demo component sfc', str)
}
// 使用 defineExpose 暴露组件内部的方法
defineExpose({ demoFun })
</script>

1.2 TSX(.tsx)暴露方法

使用 .tsx 方式定义的组件,也是通过参数 context 中的 expose() 方法暴露组件内容的方法。

创建子组件 demo-component-tsx.tsx:

import { defineComponent } from 'vue'

export default defineComponent({
  name: 'demo-component-tsx',
  setup (props, context) {
    const demoFun = (str: string) => {
      console.log('demo component tsx', str)
    }

    // 使用 expose 暴露组件内部的方法
    context.expose({ demoFun })

    return () => (
      <el-button type="primary" onClick={() => demoFun('child')}>demo component tsx</el-button>
    )
  }
})

2 父组件调用子组件中的方法

2.1 SFC(.vue)调用

在 .vue 文件中获取组件引用首先定义一个 ref 变量,然后为子组件设置 ref 属性。ref 属性值与变量名要保持一致。

import { defineComponent } from 'vue'

export default defineComponent({
  name: 'demo-component-tsx',
  setup (props, context) {
    const demoFun = (str: string) => {
      console.log('demo component tsx', str)
    }

    // 使用 expose 暴露组件内部的方法
    context.expose({ demoFun })

    return () => (
      <el-button type="primary" onClick={() => demoFun('child')}>demo component tsx</el-button>
    )
  }
})

如上面的代码所示:第一个子组件的 ref 属性值为 sfcRef,定义的变量名也是 sfcRef。在父组件中便可以使用 sfcRef 调用子组件的 demoFun 方法了。

2.2 TSX(.tsx)调用

在 .tsx 中获取组件的引用更简单,首先定义一个 ref 变量,然后将该变量设置给子组件的 ref 属性即可。

import { defineComponent, ref } from 'vue'
import DemoComponentSfc from '@/components/ref/demo-component-sfc.vue'
import DemoComponentTsx from '@/components/ref/demo-component-tsx'

export default defineComponent({
  name: 'demo-ref-tsx',
  setup () {
    const sfcRef = ref()

    const onBtnClick1 = () => {
      if (sfcRef.value) {
        sfcRef.value && sfcRef.value.demoFun('parent')
      }
    }

    const tsxRef = ref()

    const onBtnClick2 = () => {
      if (tsxRef.value) {
        tsxRef.value && tsxRef.value.demoFun('parent')
      }
    }
    return () => (
      <>
        <div>
          <DemoComponentSfc ref={sfcRef} />
          <el-button onClick={onBtnClick1}>parent button</el-button>
        </div>

        <div style="margin-top: 10px;">
          <DemoComponentTsx ref={tsxRef} />
          <el-button onClick={onBtnClick2}>parent button</el-button>
        </div>
      </>
    )
  }
})

两者实现效果一致:

image-20221020143400138

感谢你阅读本文,如果本文给了你一点点帮助或者启发,还请三连支持一下,点赞、关注、收藏,作者会持续与大家分享更多干货

Vue3+TSX实战:从SFC迁移到JSX的5个关键差异与避坑指南 本文详细解析了从Vue单文件组件(SFC)迁移到TSX开发时,在条件渲染、列表渲染、事件处理、样式处理和组件通信五个方面的关键差异与实战技巧。文章通过具体代码示例,重点对比了v-if与JSX表达式、v-for与map函数等核心语法差异,并提供了事件修饰符替代方案、CSS Modules应用等避坑指南,帮助开发者高效完成技术栈迁移。 阅读详情

相关推荐

从 Vue SFC 到 TSX 组件:手把手迁移一个带交互的列表组件(Vue3 + TypeScript)

本文详细介绍了如何将Vue3单文件组件(SFC)迁移到TSX组件的完整过程,特别针对带交互的列表组件进行实战演示。通过对比SFC与TSX的核心差异,解析v-if、v-show、v-for等指令在TSX中的替代方案,帮助开发者掌握Vue3+TypeScript项目中的TSX最佳实践,提升代码类型安全性和可维护性。

weixin_33971721的博客 296

Vue3 SFC 和 TSX 方式自定义组件实现 v-model

的本质,咱可以分别使用 SFC(.vue 文件)和 TSX(.tsx)方式定义一个组件。上面部分使用 .vue 编写的组件,下面部分使用 .tsx 编写的组件,两者独立绑定。是 vue3 中的一个内置指令,很多表单元素都可以使用这个属性,如。等,咱可以在自定义组件中实现。包括两个输入框,分别是“姓”(,运行效果完全一致。

youyacoder的博客 2891

Vue3 超前版发布,全面拥抱 JSX/TSX

我们都知道 Vue 一直主流是使用 template 模板来进行页面的编写。而就在最近,Vue3 的超前项目 Vue Macros 中,发布了 defineRender、setupComponent、setupSFC 这些新的 API,这代表了,以后 Vue3 有可能可以全面拥抱 JSX/TSX 了!!说这个新 API 之前,我们先来说说什么是 Vue Macros。

xiangzhihong8的专栏 534

vue3中tsx语法一些了解

子组件接收,使用setup函数的第二个参数context的slots拿到插槽模板数据。//defineComponent内setup外可以定义类型。emit :抛出事件实现子传父emit('事件',值)arrts:接收props没有接收的绑定数据。expose:向父组件暴露当前组件方法。设置则可以在内部创建多个节点。props:接收父传子,定义类型。return 返归html结构。slot:接受父组件传递插槽。首先直接创建tsx文件。直接使用组件函数的写法。中,在子组件设置插槽。

qq_20623665的博客 1137

2026年数据中心运行与管理专业人才培养基地建设方案(高职、数据中心运行与管理新专业、人才培养、专业代码:510310)

摘要: 为响应国家“东数西算”战略和数字经济需求,我校拟联合行业领军企业建设数据中心运行与管理人才培养基地。项目基于国家政策引导和产业快速发展背景,针对行业10万人才缺口,对标教育部新设专业标准(510310),分三阶段实施五年规划:专业奠基(2026-2028)、内涵深化(2028-2029)、辐射引领(2030-2031)。建设内容涵盖校企协同岗位能力分析、模块化课程开发(如网络管理、自动化运维等)、实训基地搭建及“课证融通”培养模式,重点培养基础设施、网络服务、运维托管三类岗位技能人才,目标建成区域性

啊碧根果的博客 1685

HSMS/SECS/GEM/GEM300半导体通讯协议介绍

HSMS/SECS/GEM/GEM300半导体通讯协议解决方案介绍 目录 SECS/GEM协议通讯 1 目录 2 1.介绍 3 1.1 产品概述 3 1.1.1 高扩展性 4 1.2 通讯实现 4 1.2.2多主机实现 4 1.3 当前的SEMI标准 5 1.3.1 功能跟友商对比 6 1.4 软件灵活性 7 1.5 无需学习SECS 7 1.6 自定义消息传递 8 1.7 记录收集 8 1.8 SECS Manual文档 8 1.9 产品清单 8 2 产品结构 9 2.1 控制面板 9 2.2 使用环境

semisecs 16万+

vue3+ts中 父子组件传参defineProps、defineEmits、defineExpose、defineOptions、defineModel

defineProps 父 <HelloWorld :list="[2, 3, 5]" msg="父组件传递给子组件" /> 子 interface Props { msg: string; list: Array<number>; } 第一种写法 没有默认值 defineProps<Props>(); 第二种写法 有默认值 withDefaults(defineProps<Props>(), { msg: "子组件默认值", list

weixin_43512977的博客 8505

ZED2双目相机运行VINS-FUSION初试

基于ZED2运行VINS-MONO的经验,在运行VINS-FUSION前有几点tips想跟大家分享,应该能在运行的过程中避免一些踩坑吧。 TIPs 1)关于zed2标定 开始使用Kalibr进行相机单目/双目及联合标定,虽然重投影误差最高也就5个像素,但实际使用效果却并不好,故建议大家相机内参还是从ZED2相机发布出的topic获取或可尝试/usr/local/zed/settings文件下的参数文档 另,启动ZED2.launch的时候,会有一个相机(一般是左目)和IMU的轴系转换关系Camera-IMU

xiaojinger_123的博客 5356

vue3 + tsx 使用ref 获取子组件的值(antd vue)

使用tsx定义的父组件通过ref,获取子组件(tsx)里面的属性。

名人卷耶 2573

WorkBuddy实战技巧:搭建高效AI工作台与自动化流程

在数字化办公场景中,AI工作台正逐渐成为提升个人与团队效率的关键工具。它不同于简单的聊天机器人,而是通过集成技能包(Skill)、自动化触发与文档处理能力,把重复性任务如信息提取、周报生成、数据表格整理等变为标准化流程。其核心原理在于将用户需求拆解为可执行的指令链,并借助本地脚本、API调用及定时任务实现“对话即操作”的智能协作。这种技术价值不仅适用于程序员,更惠及运营、客服、行政、科研等日常与文字数据打交道的群体。从自动签到、会议纪要,到批量处理Excel与合同要点提取,AI工作台的应用场景已覆盖多个高频

weixin_42547431的博客 333

SAP CO实战:如何用KKA2/CJ88结果分析码搞定项目收入成本匹配(附真实案例)

本文深入解析了SAP CO模块中结果分析码KKA2/CJ88的核心应用,通过真实案例详细阐述了如何在成本波动剧烈的销售型项目中,运用结果分析实现收入与成本的精准匹配。文章重点拆解了不同结果分析方法的适用场景与财务影响,并提供了从配置、操作到问题排查的完整实战指南,帮助财务顾问提升项目财务管理能力。

qsc9012345的博客 608

TSX 在Vue项目的使用

JSX是一种嵌入式的类似XML的语法。 它可以被转换成合法的JavaScript,尽管转换的语义是依据不同的实现而定的。 JSX因React框架而流行,但也存在其它的实现。 TypeScript支持内嵌,类型检查以及将JSX直接编译为JavaScript。 本文涉及知识 SFC 虚拟dom render 相关函数   思考 问:SFC和JSX 优劣势,Vue模板语法快捷方便为什么还要学JSX? 答: 我的理解SFC更侧重Html语法,就像画一幅画,使用标签画好结构,再将数据使用js进行.

星宇大前端 5538

IEC 60747-8 是由国际电工委员会(IEC)制定的标准,标题为《半导体器件 - 分立器件 - 第8部分:场效应晶体管》

IEC 60747-8 是由国际电工委员会(IEC)制定的标准,标题为《半导体器件 - 分立器件 - 第8部分:场效应晶体管》(Semiconductor devices - Discrete devices - Part 8: Field-effect transistors)。该标准详细规定了场效应晶体管(FETs)的测试方法,涵盖静态和动态特性测试,适用于多种类型的FET,包括结型场效应晶体管(JFETs)、绝缘栅场效应晶体管(MOSFETs,增强型和耗尽型)等。3. 标准其他部分(简要概述)

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 574

Vue3+tsx开发语法详解

很多组件库都使用了TSX的方式开发,主要因为其灵活性比较高,TSX和SFC开发的优缺点就不介绍了,这里主要说一下将SFC项目改造为TSX的过程。 安装JSX库 pnpm install @vitejs/plugin-vue-jsx -D 安装完之后在vite.config.ts进行插件使用,代码如下: import { defineConfig } from "vite";import vue from&nb

wuqing942274053的专栏 2687

【大模型+知识图谱】大模型与知识图谱融合:技术演进、实践应用与未来挑战

大模型与知识图谱的融合不是简单拼接,而是认知智能的范式重构。当符号主义的精确性与连接主义的泛化能力深度交织,我们正站在通向可信AGI的关键路口。正如OpenKG技术委员会王昊奋教授所言:“2025年将是图模协同从技术探索走向规模落地的分水岭”。参考文献OpenKG 2024年度报告(同济大学王昊奋)大型语言模型与知识图谱协同研究综述(海豚实验室,2024)知识图谱与大模型结合方法概述(黄巍,2023)图模互补:知识图谱与大模型融合综述(优快云,2024)

知识靠谱的博客 1092

Kafka 性能优化与常见问题排查

Kafka 的高性能依赖于合理的集群设计、参数优化与高效的监控体系。生产环境中,应重点关注I/O 瓶颈、分区规划、Producer/Consumer 参数调优,并通过监控与排查手段快速定位问题,从而保障 Kafka 在实时场景下的稳定运行。

X2829352498的博客 235

VUE3+TSX

已实现的相关功能示范 typescript vue3大部分语法示例 vite脚手架配置 tsx开发模式 less router vuex Element-plus 上述功能再结合axios我认为大部分小项目需求都足以胜任,如果有有兴趣的同学欢迎fork代码体验一番,也欢迎各位提交issue交流。 为什么vue项目要抛弃SFC写法而尝试jsx/tsx方式来编码? 这个问题本人觉得有一篇博客已经总结得相当不错,我就不再多赘述相关细节,博客链接如下: 为什么我推荐使用JSX开发Vue3 当然这也是见仁见智,每个人

CJohnSnow的博客 7052

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

vue项目中,tsx格式的文件是什么,怎样使用

tsx.tsx是 Vue 3 中一种强大的组件编写方式,结合了 TypeScript 的类型安全和 JSX 的灵活性。需要配置和。可以单独使用.tsx文件,也可以在.vue中通过使用。选择.vue还是.tsx,应根据项目复杂度、团队习惯和维护成本权衡。然后按上述步骤添加 TSX 支持即可。

bsklhao的博客 2685

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

直接在*.vue文件(SFC)中使用JSX/TSX渲染函数,真香!

这篇文件介绍了如何在*.vue文件中直接使用JSX/TSX渲染函数,只需要导入,然后将script标签的lang设置为tsx或者jsx。就可以在script中直接定义组件,然后在template中直接使用组件就可以了。这样我们既可以使用JSX/TSX渲染函数的灵活性,也可以使用vue模版语法中内置的指令等功能。如果我的文章对你有点帮助,欢迎关注公众号:【欧阳码农】,文章在公众号首发。

qq_36348403的博客 977

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Vue 3.4 + TSX 项目实战:从 SFC 迁移 5 个组件的完整指南与性能对比

本文详细介绍了如何将Vue 3.4项目中的单文件组件(SFC)迁移到TSX语法,通过5个典型组件案例展示迁移步骤与性能对比。TSX提供了更强的类型安全性和灵活性,特别适合复杂逻辑组件和类型驱动开发。实战指南包括环境配置、组件迁移、性能优化及工程化建议,帮助开发者高效完成技术升级。

weixin_33946605的博客 318

如何在 vue3 中使用 jsx/tsx?

关于 Vue3 中 JSX 的语法就介绍这么多,其实如果你熟悉 Vue 的 SFC 语法还是能很快上手 JSX 语法的,因为它们也就是写法上有一些区别,用法上还是基本一样的。至于选择哪一种写法还是取决于我们自己,我的建议是二者兼得,你可以根据实现不同的功能采用不同的写法。当然,如果你是一个团队项目,你还是乖乖听你领导的吧。

xdididi的博客 1444

2024年最新TSX 在Vue项目的使用,2024Web前端精选面试实战总结整理

对于框架原理只能说个大概,真的深入某一部分具体的代码和实现方式就只能写出一个框架,许多细节注意不到。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】算法方面还是很薄弱,好在面试官都很和蔼可亲,擅长发现人的美哈哈哈…(最好多刷一刷,不然影响你的工资和成功率???在投递简历之前,最好通过各种渠道找到公司内部的人,先提前了解业务,也可以帮助后期优秀 offer 的决策。

2401_84433829的博客 1063

总结 Vue3 组件管理 12 种高级写法,灵活使用才能提高效率

总结一下vue 组件的高级写法~Vue 的组件有很多写法,合适的场景选择合适的写法,才能更好地提高开发效率~而不是死定硬背。

qq_34082921的博客 1770

vue3+tsx+pinia实践

vue3+tsx+pinia的实践以及个人的一点体会

alviter的博客 510
上一篇: Vue3 JS 与 SCSS变量相互使用
下一篇: Vue3 SFC 和 TSX 方式自定义组件实现 v-model
程序员优雅哥
博客等级 码龄4年 52粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员优雅哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值