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

arkTs:使用回调函数的方法实现子组件向父组件传值

使用回调函数的方法实现子组件向父组件传值

  • 1 主要内容说明
  • 2 实现步骤
    • 2.1 父组件中定义回调函数
    • 2.2 子组件声明并调用回调函数
    • 2.3 注意事项
  • 3 源码
    • 3.1 父组件
    • 3.2 子组件
    • 3.3 源码效果显示截图
  • 4 结语
  • 5 定位日期

1 主要内容说明

本文源码是一套 父组件与子组件之间双向数据传递的示例代码。

  • 父组件 Index
    用户在输入框中输入内容,点击按钮后将数据传递给子组件。
    同时也可以接收子组件传回的数据并展示。

  • 子组件 childPage
    接收父组件传过来的内容并显示。
    允许用户在子组件中输入数据,点击按钮后通过回调函数传回给父组件。

在 ArkTS 中,若不使用@Link 或 @Provide+@Consume 进行组件间的数据双向同步,则可以通过回调函数(函数作为参数) 的方式,实现在子组件中触发父组件的逻辑,从而实现“子传父”的功能,再结合@Prop父传子的单向传递,则可实现两组件的数据双向传递。

2 实现步骤

2.1 父组件中定义回调函数

  • 这个函数接收子组件传来的数据,然后用于更新父组件自己的状态。
@State showTextChild: string = ""childPage({onClickText: (val) => {this.showTextChild = val // 子组件传来的内容}
})

2.2 子组件声明并调用回调函数

  • 使用一个函数属性接收父组件传进来的方法
  • 在需要的时候调用这个函数(如点击按钮时)
// 子组件属性定义
onClickText: (val: string) => void = () => {}// 点击时触发回调
Button("将信息传给父组件").onClick(() => {this.onClickText(this.textChild)})

2.3 注意事项

  • 子组件中不能直接使用 @Prop 修改数据,只能“读取”。
  • 通过函数传递,数据流仍然是“单向”的,但逻辑上实现了“子组件触发父组件的状态更新”。
  • 默认值 ()=>{} 是为了防止父组件没有传入函数时报错。

3 源码

3.1 父组件

这一段是父组件逻辑。它的核心点:

  • 输入 → textContent
  • 点击按钮 → textData(传给子组件)
  • 子组件通过 onClickText 回调把数据传回父组件 → showTextChild
/*** 通过对象的方式父组件和子组件间进行数据传输*/
import { childPage } from './childPage' // 引入子组件@Entry
@Component
struct Index {// 父组件内部用来接收输入框实时输入的内容@State textContent: string = "接收输入框的内容"// 实际传递给子组件显示的内容,只有点击按钮才会更新@State textData: string = "传递给子组件的内容"// 用来接收子组件传回来的内容@State showTextChild: string = ""build() {Column() {// 父组件标题Text("父组件").fontSize(20).fontWeight(FontWeight.Bold)// 输入框,输入内容会实时保存在 textContent 中TextInput({ placeholder: "父组件输入的内容" }).width("90%").margin({ top: 20 }).onChange((val) => {this.textContent = val // 实时更新输入内容})// 显示当前将要传给子组件的内容Text(this.textData).margin({ top: 20 })// 按钮点击后才把输入框内容赋值到 textData,从而传给子组件Button("点击父组件数据传到子组件").margin({ top: 20, bottom: 50 }).onClick(() => {this.textData = this.textContent})// 显示从子组件传回来的内容Text("子组件传来的信息:" + this.showTextChild).margin({ bottom: 30 })// 使用子组件 childPage,并通过对象方式传值childPage({ShowText: this.textData, // 父传子:通过 Props 将 textData 传给子组件onClickText: (val) => {  // 子传父:当子组件触发回调时,把数据赋值到 showTextChildthis.showTextChild = val}})}.width("100%") // 设置整个页面宽度为 100%}
}

3.2 子组件

功能实现方式
接收父组件传值@Prop ShowText: string
显示传入内容Text(“显示父组件传过来的内容:” + this.ShowText)
接收用户输入TextInput 的 onChange 设置 textChild
子传父数据通过调用 onClickText(this.textChild)
/*** 子组件*/
@Component
export struct childPage {// 使用 @Prop 装饰器接收父组件传递的数据,支持响应式更新@Prop ShowText: string = "子组件默认初始内容"// 声明一个函数类型的属性,用于回调传值给父组件,初始为一个空函数避免报错onClickText: (val: string) => void = () => {}// 子组件内部保存要传回父组件的文本内容textChild: string = ""build() {Column({ space: 20 }) {// 显示标题Text("调用的子组件").fontSize(18).fontWeight(FontWeight.Bold)// 显示父组件传过来的内容Text("显示父组件传过来的内容:" + this.ShowText).fontSize(15).fontWeight(FontWeight.Bold).margin({ top: 50 })// 子组件的输入框,用于输入要传给父组件的内容TextInput({ placeholder: "输入子组件的内容,传递给父组件" }).width("90%").onChange((val) => {this.textChild = val // 将输入内容保存到 textChild})// 点击按钮后触发回调,把输入的内容传递给父组件Button("将信息传给父组件").onClick(() => {this.onClickText(this.textChild) // 调用父组件传来的回调函数})}.width("90%")  // 设置子组件宽度.height("50%") // 设置子组件高度.padding(10)   // 添加内边距.border({ width: 2, color: "#fcc", radius: 8 }) // 边框样式.shadow({ radius: 18, color: "#ff589f3c", offsetX: 9, offsetY: 9 }) // 阴影效果}
}

3.3 源码效果显示截图

在这里插入图片描述

4 结语

在某种情况下,父组件需要对各个子组件分别控制,设置不同的内容属性,而子组件返回的参数内容,可以是数据和对象,需要分别进行处理。此时可以尝试使用回调函数的方法实现两组件间的数据传递,便于控制。

两组间间的传值也可以使用@Link 或 @Provide+@Consume,根据实际情况选择合适的传值方式便可。

华为官方@Prop装饰器的参考指南@Prop装饰器:父子单向同步

由于笔者的能力有限,创作的内容有所不足在所难免,也敬请读者包涵和指出,万分感谢!

5 定位日期

2025-04-19;
12:51;

相关文章:

arkTs:使用回调函数的方法实现子组件向父组件传值

使用回调函数的方法实现子组件向父组件传值 1 主要内容说明2 实现步骤2.1 父组件中定义回调函数2.2 子组件声明并调用回调函数2.3 注意事项 3 源码3.1 父组件3.2 子组件3.3 源码效果显示截图 4 结语5 定位日期 1 主要内容说明 本文源码是一套 父组件与子组件之间双向数据传递的…...

VBA 调用 dll 优化执行效率

问题描述 之前excel 用vba写过一个应用,请求的是aws lambda 后端, 但是受限于是云端服务,用起来响应特别慢,最近抽了点时间准备优化下,先加了点日志看看是哪里慢了 主方法代码如下,函数的主要目的是将 Excel 工作簿的…...

【机器学习-周总结】-第4周

以下是本周学习内容的整理总结,从技术学习、实战应用到科研辅助技能三个方面归纳: 文章目录 📘 一、技术学习模块:TCN 基础知识与结构理解🔹 博客1:【时序预测05】– TCN(Temporal Convolutiona…...

Django-Friendship 项目常见问题解决方案

Django-Friendship 项目常见问题解决方案 django-friendship Django app to manage following and bi-directional friendships 项目地址: https://gitcode.com/gh_mirrors/dj/django-friendship Django-Friendship 是一个基于 Django 的应用,它允许创建和管…...

C语言用if else求三个数最小值的一题多解

一、问题引入 假设x,y,z为整数,使用if else语句求x,y,z三个数中的最小值? 二、三种解法 第一种解法: #include<stdio.h> int main(){int x,y,z,min;printf("请输入三个整数&#xff1a;");scanf_s("%d %d %d", &x, &y, &z);//初始值…...

AI时代下 你需要和想要了解的英文缩写含义

在AI智能时代下&#xff0c;越来愈多的企业都开始重视并应用以及开发AI相关产品&#xff0c;这个时候都会或多或少的涉及到英文&#xff0c;英文还好&#xff0c;但是如果是缩写&#xff0c;如果我们没有提前了解过&#xff0c;我们往往很难以快速Get到对方的意思。在这里&…...

uniApp小程序保存定制二维码到本地(V3)

这里的二维码组件用的 uv-ui 的二维码 可以按需引入 QRCode 二维码 | 我的资料管理-uv-ui 是全面兼容vue32、nvue、app、h5、小程序等多端的uni-app生态框架 <uv-qrcode ref"qrcode" :size"280" :value"payCodeUrl"></uv-qrcode>&l…...

2025年对讲机选购指南:聚焦核心参数与场景适配

在无线通信领域&#xff0c;对讲机始终占据着专业通讯工具的独特地位。随着5G时代到来和物联网技术深化&#xff0c;2025年的对讲机市场正呈现智能化、专业化、场景化的升级趋势。面对琳琅满目的产品&#xff0c;选购者需从通信性能、环境适应性、智能集成度三个维度进行综合考…...

C/C++ 动态链接详细解读

1. 为什么要动态链接&#xff1f; 1.1 静态链接浪费内存和磁盘空间 静态链接的方式对于计算机内存和磁盘空间浪费非常严重&#xff0c;特别是多进程操作系统的情况下&#xff0c;静态链接极大的浪费了内存空间。在现在的Linux系统中&#xff0c;一个普通的程序会使用的C 语言静…...

力扣-hot100(无重复字符的最长子串)

3. 无重复字符的最长子串 中等 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。暴力直观解法一&#xff1…...

python flask 项目部署

文章目录 概述 windows 部署准备工作使用 Waitress 部署 Flask 应用 linux 部署**2. 使用 WSGI 服务器**示例&#xff1a;使用 Gunicorn nginx反向代理**5. 使用进程管理工具**示例&#xff1a;使用 Systemd 概述 在 Windows 上使用 Waitress 部署 Flask 应用是一个不错的选择…...

Java课程内容大纲(附重点与考试方向)

本文是在传统 Java 教程框架基础上&#xff0c;加入了重点提示与考试思路&#xff0c;适合用于课程备考、知识查漏与面试准备。 第1章&#xff1a;Java语言基础 ⭐ 重点知识&#xff1a; Java平台特点&#xff08;跨平台性、JVM&#xff09; JDK、JRE、JVM 区别 Java 程序的…...

实现AWS Lambda函数安全地请求企业内部API返回数据

需要编写一个Lambda函数在AWS云上运行&#xff0c;它需要访问企业内部的API获取JSON格式的数据&#xff0c;企业有网关和防火墙&#xff0c;API有公司的okta身份认证&#xff0c;通过公司的域账号来授权访问&#xff0c;现在需要创建一个专用的域账号&#xff0c;让Lambda函数访…...

面试题--随机(一)

MySQL事务中的ACID特性&#xff1f; A 原子性 事务是一组SQL语句&#xff0c;不可分割 C 一致性 事务中的SQL语句要么同时执行&#xff0c;即全部执行成功&#xff0c;要么全部不执行&#xff0c;即执行失败 I 隔离性 MySQL中的各个事务通过不同的事务隔离等级&#xff0c;产生…...

200+短剧出海平台:谁能成为“海外红果”?

2025年&#xff0c;短剧的国际市场表现令人瞩目。仅在两年前&#xff0c;业界关注的焦点仍是美国市场&#xff0c;如今国产短剧应用已成功打入包括印尼、巴西、美国、墨西哥、印度、菲律宾、泰国、日本、哥伦比亚及韩国在内的多个国家&#xff0c;轻松获得超过500万次下载。 市…...

Visio导出清晰图片步骤

在Visio里画完图之后如何导出清晰的图片&#xff1f;&#x1f447; ①左上角单击【文件】 ②导出—更改文件类型—PNG/JPG ③分辨率选择【打印机】&#xff0c;大小选择【源】&#xff0c;即可。 ④选择保存位置并命名 也可以根据自己需要选择是否需要【透明底】哈。 选PNG 然…...

Linux系统:详解进程等待wait与waitpid解决僵尸进程

本节重点 理解进程等待的相关概念掌握系统调用wait与waitpid的使用方法输出型status参数的存储结构阻塞等待与非阻塞等待 一、概念 进程等待是操作系统中父进程与子进程协作的核心机制&#xff0c;指父进程通过特定方式等待子进程终止并回收其资源的过程。这一机制的主要目的…...

6.7 ChatGPT自动生成定时任务脚本:Python与Cron双方案实战指南

ChatGPT自动生成定时任务脚本:Python与Cron双方案实战指南 关键词:定时任务调度, ChatGPT 代码生成, Cron 脚本开发, Python 调度器, 自动化更新系统 6.3 使用 ChatGPT 生成 Cron 调度脚本 在 GitHub Sentinel 的定期更新功能中,定时任务调度是核心模块。本节演示如何通过…...

K8S运维实战之集群证书升级与容器运行时更换全记录

第一部分&#xff1a;Kubernetes集群证书升级实战 tips:此博文只演示一个节点作为示范&#xff0c;所有的集群节点步骤都可以参考。 项目背景 某金融业务系统Kubernetes集群即将面临生产证书集中过期风险&#xff08;核心组件证书剩余有效期不足90天&#xff09;&#xff0c…...

IntelliJ IDEA clean git password

IntelliJ IDEA clean git password 清除git密码 方法一&#xff1a;&#xff08;这个要特别注意啊&#xff0c;恢复默认设置&#xff0c;你的插件什么要重新下载了&#xff09; File->Manage IDE Settings->Restore Default Settings以恢复IDEA的默认设置(可选); 清空…...

【已更新完毕】2025泰迪杯数据挖掘竞赛C题数学建模思路代码文章教学:竞赛智能客服机器人构建

完整内容请看文末最后的推广群 基于大模型的竞赛智能客服机器人构建 摘要 随着国内学科和技能竞赛的增多&#xff0c;参赛者对竞赛相关信息的需求不断上升&#xff0c;但传统人工客服存在效率低、成本高、服务不稳定和用户体验差的问题。因此&#xff0c;设计一款智能客服机器…...

2025年4月19日 记录大模型出现的计算问题

2025年4月19日 记录大模型出现的计算问题&#xff0c;用了四个大模型计算json的数值&#xff0c;3个错误&#xff0c;1个正确 问题 Class Train Val answer 2574 853 screen 5025 1959 blackBoard 7847 3445 teacher 8490 3228 stand…...

ACI EP Learning Whitepaper 3. Disabling IP Data-plane Learning 功能

目录 1. 使用场景 1.1 未disable IP data-plane learning时 1.2 disable IP data-plane learning后 2. 一代Leaf注意事项 3. L2 未知单播注意事项 1. 使用场景 Windows网卡的动态负载均衡绑定模式等。或多个设备共享相同VIP并通过ARP/GARP/ND来宣告VIP切换时,这些外部设…...

C++入门七式——模板初阶

目录 函数模板 函数模板概念 函数模板格式 函数模板的原理 函数模板的实例化 模板参数的匹配原则 类模板 类模板的定义格式 类模板的显式实例化 当面对下面的代码时&#xff0c;大家会不会有一种无力的感觉&#xff1f;明明这些代码差不多&#xff0c;只是因为类型不…...

计算机网络 - 在浏览器中输入 URL 地址到显示主页的过程?

第一步&#xff0c;浏览器通过 DNS 来解析 URL&#xff0c;得到相应的 ip 地址&#xff08;到哪里找) 和 方法&#xff08;做什么&#xff09; 第二步&#xff0c;浏览器于服务器建立 TCP 三次握手连接 第三步&#xff0c;建立好连接后&#xff0c;浏览器会组装 HTTP 请求报文…...

【教程】检查RDMA网卡状态和测试带宽 | 附测试脚本

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 检查硬件和驱动状态 测试RDMA通信 报错修复 对于交换机的配置&#xff0c;可以看这篇&#xff1a; 【教程】详解配置多台主机通过交换机实现互…...

(二)Trae 配置C++ 编译

Trae配置c编译 零 CMake 编译C0.1 下载安装0.2 安装设置0.3 三种编译方式(见 下文 一 二 三)0.4 调试 (见 下文四) 一 使用MSVC方式编译1.1 安装编译环境1.2安装插件1.3 设置文件 二 使用GCC方式2.1 安装编译环境2.1.1下载:[MinGw](https://gcc-mcf.lhmouse.com/)2.1.2安装:(以…...

Doris 本地部署集群重启后报错

报错描述 Docker 版本&#xff1a; apache/doris:fe-2.1.9 apache/doris:be-2.1.9 连接 MySQL 报错&#xff1a; ERROR 2003 (HY000): Cant connect to MySQL server on 127.0.0.1:9030 (111)FE 日志&#xff1a; INFO (UNKNOWN fe_e7cff187_69d4_42ee_90be_147e87310549(-1…...

日本公司如何实现B2B商城订货系统的自动化和个性化?

在日本构建具备前后台日文本地化、业务员代客下单、一客一价、智能拆单发货的B2B电商系统&#xff0c;需结合日本商业习惯与技术实现。以下是关键模块的落地方案&#xff1a; 一、系统架构设计 1. 前端本地化 语言与UI适配 采用全日语界面&#xff0c;包含敬语体系&#xff08…...

自动化测试相关协议深度剖析及A2A、MCP协议自动化测试应用展望

一、不同协议底层逻辑关联分析 1. OPENAPI协议 OPENAPI 协议核心在于定义 API 的规范结构&#xff0c;它使用 YAML 或 JSON 格式来描述 API 的端点、请求参数、响应格式等信息。其底层逻辑是构建一个清晰、标准化的 API 描述文档&#xff0c;方便不同的客户端和服务端进行对接…...