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

HarmonyOS学习 实验九:@State和@Prop装饰器的使用方法

HarmonyOS应用开发:父子组件状态管理实验报告

引言

在HarmonyOS应用开发领域,组件之间的状态管理是一个至关重要的概念。通过有效的状态管理,我们可以确保应用的数据流动清晰、可预测,从而提升应用的稳定性和可维护性。本次实验旨在探索HarmonyOS中父子组件之间的状态管理机制,特别是通过@State@Prop装饰器实现状态传递的方法。

实验目的

本次实验的主要目的是在HarmonyOS应用中实现父子组件的状态管理,具体目标包括:

  • 掌握@State装饰器的使用方法,用于在组件内部定义和管理状态。
  • 理解@Prop装饰器的作用,实现父组件向子组件的状态传递。
  • 验证单向数据流的状态管理机制,确保子组件不能直接修改父组件的状态。

实验环境与技术栈

  • 开发软件:DevEco Studio(HarmonyOS官方推荐的集成开发环境)
  • 操作系统:HarmonyOS(实验在HarmonyOS设备上运行)
  • API版本:API9(确保兼容性和最新特性支持)
  • 编程语言与框架:ets(Extensible TypeScript),ArkUI框架(HarmonyOS的声明式UI开发框架)

实验步骤与代码实现

1. 创建父组件(ParentComponent.ets)

父组件是状态管理的核心,它负责定义和更新状态,并将状态传递给子组件。以下是父组件的关键代码实现:

// ParentComponent.ets
import {ChildComponent} from './ChildComponent';
@Entry
@Component
struct ParentComponent {// 父组件的状态变量,用于控制子组件的状态@State count: number = 0;build() {Column() {Text(`父组件计数: ${this.count}`).fontSize(20).margin({ top: 20 })// 增加计数按钮Button("增加计数").margin({ top: 10 }).onClick(() => {this.count++;})// 减少计数按钮Button("减少计数").margin({ top: 10 }).onClick(() => {this.count = Math.max(0, this.count - 1);})// 创建子组件,并将父组件的状态传递给子组件ChildComponent({ count: this.count })}.width("100%").height("100%")}
}

2. 创建子组件(ChildComponent.ets)

子组件负责接收并展示父组件传递的状态,但不能直接修改父组件的状态。以下是子组件的关键代码实现:

// ChildComponent.ets
export {ChildComponent}
@Entry
@Component
struct ChildComponent {// 使用@Prop装饰器接收父组件传递的状态@Prop count: number;build() {Column() {Text(`子组件接收到的计数: ${this.count}`).fontSize(18).margin({ top: 20 })// 子组件内部按钮,尝试修改父组件的状态(但不会生效,因为@Prop是单向绑定)Button("尝试修改父组件计数(无效)").margin({ top: 10 }).onClick(() => {this.count = 100; // 这里修改不会影响父组件})}.width("100%").height("100%")}
}

3.效果

在这里插入图片描述

在这里插入图片描述

遇到的问题及解决方案

在实验过程中,我们遇到了一个问题:在子组件中尝试修改父组件的状态时,发现修改无效。经过查阅文档和资料,我们理解到@Prop装饰器是单向绑定的,子组件不能直接修改父组件的状态。如果需要修改父组件的状态,应该通过事件回调的方式通知父组件进行修改。

实验结论与展望

通过本次实验,我们成功实现了HarmonyOS应用中父子组件的状态管理,验证了@State@Prop装饰器的使用方法,并深刻理解了单向数据流的状态管理机制。这些知识为后续更复杂的应用开发奠定了坚实的基础。

展望未来,我们将进一步探索HarmonyOS中的其他状态管理方案,如使用@Link装饰器实现双向绑定,以及利用状态管理库(如Redux)进行更复杂的状态管理。同时,我们也将关注HarmonyOS生态的不断发展和完善,期待更多高效、便捷的状态管理工具和方法的出现。


通过本次实验,我们不仅掌握了HarmonyOS中父子组件状态管理的基本方法,还深刻理解了单向数据流的重要性。希望这篇博客能够为HarmonyOS开发者提供一些有益的参考和借鉴。

相关文章:

HarmonyOS学习 实验九:@State和@Prop装饰器的使用方法

HarmonyOS应用开发:父子组件状态管理实验报告 引言 在HarmonyOS应用开发领域,组件之间的状态管理是一个至关重要的概念。通过有效的状态管理,我们可以确保应用的数据流动清晰、可预测,从而提升应用的稳定性和可维护性。本次实验…...

lodash-es 详解

import { cloneDeep } from lodash-es 是使用 ​​ES Modules​​ 语法从 lodash-es 包中按需导入 cloneDeep 函数。这是现代前端开发中推荐的使用 Lodash 的方式: 1. lodash-es 是什么? 它是 Lodash 的 ​​ES Modules 版本​​(普通 lodas…...

使用nvm install XXX 下载node版本时网络不好导致npm下载失败解决方案

若nvm install ***安装报错解决方案: 离线安装Node.js npm,可直接下载Node.js 14.21.3的完整离线包(含npm): 访问 Node.js历史版本下载页:https://nodejs.org/download/release/v14.21.3/ 下载 node-v14.…...

VScode+OpenOCD+HTOS栈回溯在国产mcu芯片上完全调试

VScodeOpenOCDCmakeHTOS栈回溯在国产32芯片上完全调试 说实话用的都是HAL库开发的,flash链接文件用的都是stm32的,只能说国产芯片抄的基本完全一样了。具体芯片是什么就不介绍了,看过文章就能猜出来是哪家的了。代码开源在Gitee上了。https:…...

2025年最新版动漫短剧系统开发小程序app教程,源码部署上线

以下是动漫短剧系统开发上线的详细教程,包含从0到1的全流程: 一、需求分析(关键:明确核心功能) 核心功能清单: 用户端:短视频浏览、弹幕评论、收藏/点赞、创作者关注、付费订阅。创作者端&am…...

Java练习——day2(集合嵌套)

文章目录 练习1练习2练习3 练习1 给定一个字符串列表List words&#xff0c;统计每个单词出现的次数&#xff0c;并用Map<String, Integer>存储结果。 示例代码&#xff1a; import java.util.*;public class WordCount {public static void main(String[] args) {// 示…...

国产CPU处理器性能实测:龙芯/海光/兆芯/华颉VS英特尔和AMD!

最近后台总收到粉丝留言&#xff1a;"现在国产CPU到底行不行&#xff1f;想换电脑又怕国产的不够强"。今天咱们就掏心窝子聊聊这个话题——国产CPU处理器到底是"弯道超车"还是"贴牌组装"&#xff1f;性能真能和英特尔i5、AMD锐龙掰手腕吗&#x…...

Excel自定义函数取拼音首字母

1.启动Excel 2003&#xff08;其它版本请仿照操作&#xff09;&#xff0c;打开相应的工作表&#xff1b; 2.执行“工具 > 宏 > Visual Basic编辑器”命令&#xff08;或者直接按“AltF11”组合键&#xff09;&#xff0c;进入Visual Basic编辑状态&#xff1b; 3.执行“…...

Vue3 SSR生物启发架构:仿生渲染与DNA流式编码

一、神经元弹性调度网络 1.1 突触连接式渲染集群 1.2 生物能效对比表 调度模式能耗(kWh/万次)突触延迟容错阈值信息熵利用率轮询调度4.2220ms60%35%蚁群算法2.8150ms75%48%神经形态调度0.945ms93%82%DNA协进化调度0.312ms99.9%95% 二、DNA流式编码协议 2.1 四碱基序列转换器…...

git的上传流程

好久没使用git 命令上传远程仓库了。。。。。温习了一遍&#xff1b; 几个注意点--单个文件大小不能超过100M~~~ 一步步运行下面的命令&#xff1a; 进入要上传的文件夹内&#xff0c;点击git bash 最终 hbu的小伙伴~有需要nndl实验的可以自形下载哦...

C++学习记录:

今天我们来学习一门新的语言&#xff0c;也是C语言最著名的一个分支语言&#xff1a;C。 在C的学习中&#xff0c;我们主要学习的三大组成部分&#xff1a;语法、STL、数据结构。 C的介绍 C的历史可追溯至1979年&#xff0c;当时贝尔实验室的本贾尼斯特劳斯特卢普博士在面对复杂…...

MAC-批量任务并行处理​​实现

批量任务并行处理示例(基于Spring框架)​​ 以下是一个 ​​完整可运行​​ 的批量任务并行处理示例,包含 ​​任务拆分、异步执行、线程池管理、耗时 监控​​ 等核心功能,适用于数据清洗、文件处理、批量通知等场景。 ​​1. 线程池配置​​ @Configuration @EnableA…...

《电子类专业:通往科技未来的钥匙》

一、电子类专业全景概览 在当今科技飞速发展的时代,电子类专业无疑占据着现代科技体系中基础与核心的重要地位。从我们日常生活中不可或缺的智能手机、电脑,到推动社会进步的人工智能、大数据技术,再到探索宇宙奥秘的航天航空设备,电子类专业的身影无处不在。它就像一把万…...

全链路开源数据平台技术选型指南:六大实战工具链解析

在数字化转型加速的背景下&#xff0c;开源技术正重塑数据平台的技术格局。本文深度解析数据平台的全链路架构&#xff0c;精选六款兼具创新性与实用性的开源工具&#xff0c;涵盖数据编排、治理、实时计算、联邦查询等核心场景&#xff0c;为企业构建云原生数据架构提供可落地…...

大塔集团乔迁开新局 企业赋能贯全程

2025年4月15 日&#xff0c;在佛山市佛山大道北175号&#xff0c;大塔集团乔迁开业盛大启幕&#xff0c;业界目光聚焦于此。 点睛仪式 揭牌仪式 彩绸飘扬、嘉宾云集&#xff0c;现场气氛热烈非凡&#xff0c;这一标志性时刻&#xff0c;宣告着大塔集团正式踏上全新发展征程。 …...

Ubuntu系统下部署 NFS服务教程

Ubuntu系统下部署 NFS服务教程 一、NFS 服务简介二、环境准备三、服务器端配置1. 安装 NFS 服务端2. 创建共享目录3. 配置共享规则4. 生效配置并启动服务四、客户端配置1. 安装 NFS 客户端2. 创建本地挂载点3. 挂载远程目录4. 验证挂载状态5. 测试读写五、高级配置技巧1. 开机自…...

shell编程正则表达式与文本处理器

目录 基础正则表达式 扩展正则表达式 sed工具使用方法 awk 工具使用方法 前言 在 Shell 编程的世界里,正则表达式与文本处理器是两大不可或缺的利器。正则表达式(RegularExpression,简称 RE)作为一种强大的字符串匹配工具,能够通过特定的字符组合来描述和匹配一系列符合特…...

SparseDrive---论文阅读

纯视觉下的稀疏场景表示 算法动机&开创性思路 算法动机&#xff1a; 依赖于计算成本高昂的鸟瞰图&#xff08;BEV&#xff09;特征表示。预测和规划的设计过于直接&#xff0c;没有充分利用周围代理和自我车辆之间的高阶和双向交互。场景信息是在agent周围提取&#xff…...

YOLOV8 OBB 海思3516训练流程

YOLOV8 OBB 海思3516训练流程 目录 1、 下载带GPU版本的torch(可选) 1 2、 安装 ultralytics 2 3、 下载pycharm 社区版 2 4、安装pycharm 3 5、新建pycharm 工程 3 6、 添加conda 环境 4 7、 训练代码 5 9、配置Ymal 文件 6 10、修改网络结构 9 11、运行train.py 开始训练模…...

ThinkPHP框架接入Stripe支付

我的框架是ThinkPHP5.0&#xff0c;后台是fastadmin 1.安装composer包&#xff0c;包名是 stripe/stripe-php 2.下单代码 <?php namespace app\common\service; use app\common\controller\Api; use Stripe\Stripe; use Stripe\Checkout\Session; use think\Config;clas…...

文件上传漏洞学习

什么是文件上传漏洞 文件上传漏洞指用户通过上传一个恶意的可执行文件&#xff0c;例如木马、病毒、webshell、恶意脚本等等在服务器中执行&#xff0c;配合其他工具&#xff0c;获得网站控制权或达到一些其他效果。 文件上传漏洞原理 由于对上传文件的格式限制不够严格&…...

【function call】大模型的hello function call

1. 所有的大模型的function call 功能就是将function 也当作输入到大模型中 2. 不同的平台或者模型调用的方式可能不一样 一个硅基流动的例子 import requests from openai import OpenAIclient = OpenAI(api_key="sk-vuffqulyakrzccyqenavdryxyamqkhemidvgaihdqmehmhlv&…...

CVFSNet:一种用于端到端脑梗塞溶栓治疗后改良脑梗死溶栓分级(mTICI)评分的跨视图融合评分网络|文献速递-深度学习医疗AI最新文献

Title 题目 CVFSNet: A Cross View Fusion Scoring Network for end-to-end mTICI scoring CVFSNet&#xff1a;一种用于端到端脑梗塞溶栓治疗后改良脑梗死溶栓分级&#xff08;mTICI&#xff09;评分的跨视图融合评分网络 01 文献速递介绍 中风目前是全球主要的致死原因之…...

解决 .Net 6.0 项目发布到IIS报错:HTTP Error 500.30

今天在将自己开发许久的项目上线的时候&#xff0c;发现 IIS 发布后请求后端老是报一个 HTTP Error 500.30 的异常&#xff0c;如下图所示。   后来仔细调查了一下发现是自己的程序中写了 UseStaticFiles 的依赖注入&#xff0c;这个的主要作用就是发布后端后&#xff0c;想…...

施磊老师基于muduo网络库的集群聊天服务器(一)

文章目录 技术栈项目需求环境安装muduo网络库安装编译错误:解决办法:移动头文件和库文件 redis和mysql安装验证mysql环境修改mysql密码Nginx--先不安装 Json介绍为什么需要json?什么是 json 序列化?常用的数据传输序列化格式?直接使用json第三方库json序列化代码演示复杂键值…...

WebStorm中Gitee账号的密码登录与令牌登录设置

1.账号密码添加 1.1安装插件 说明&#xff1a;安装Gitee插件 1.2点击通过账号密码登录 说明&#xff1a;需要Gitee账号和密码 1.3登录 说明&#xff1a;通过邮箱和密码登录 1.4登录成功 2.令牌登录 2.1Token登录 说明&#xff1a;需要Gitee生成的私人令牌进行登录。 2.2G…...

Android开发案例——简单计算器

实现计算机的简单功能 1、显示页面jsj.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height&…...

实现类似 “更新中” 的水平进度条按钮效果

如上图所示 activity_test3.xml <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"android:layout_height"match_parent…...

【QT入门到晋级】QT打动态库包及引入动态库包

前言 本篇为持续更新状态&#xff0c;内容包含window、Linux下打动态库包&#xff0c;以及引入动态库包的方式。 一、window 1、动态库打包 以百度的OCR接口调用打dll库为例&#xff0c;以下为qtcreator创建动态库过程&#xff1a; 1.1Qtcreator创建lib项目 创建成功后&…...

Linux:解决 yum 官方源无法使用(CentOS 7)

文章目录 一、原因二、解决方法 一、原因 CentOS 7 在 2024年 6 月 30 日结束了它的生命周期&#xff08;End of Life, EOL&#xff09;&#xff0c;这意味着官方不再提供更新和支持&#xff0c;包括其 yum 源也将停止服务。 因此对于仍然需要使用 CentOS 7 的用户来说&#…...

软考-高项,知识点一览十八 项目绩效域

十八 项目绩效域 价值驱动的项目管理知识体系关注价值的实现&#xff0c;包含了 项目管理原则、绩效域、项目生命周期、过程组、10 大知识领域和价值交付系统。在整个生命周期过程中&#xff0c;项目管理者需要始终坚持项目管理原则&#xff0c;通过涵盖 10 大知识领域的项目管…...

macOS安装java

一、下载 官网Java Downloads | Oracle 安装载java8,下载对应的JDK Java Downloads | Oracle 二、双击安装 安装 完成 三、查看安装位置 打开终端窗口&#xff0c;执行命令&#xff1a; /usr/libexec/java_home -V /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Content…...

wpf ScaleTransform

在WPF中&#xff0c;ScaleTransform是用于实现元素缩放的核心类&#xff0c;属于System.Windows.Media命名空间下的变换类型。以下是其主要特性与使用方式的总结&#xff1a; ‌核心属性‌ ‌缩放比例‌ ScaleX&#xff1a;水平方向缩放比例&#xff08;默认1.0&#xff0c;即…...

开源分享!! 4款免费的数据库在线工具

无论是开发企业网站、搭建电商系统&#xff0c;还是做复杂的应用开发&#xff0c;数据库管理都是绕不开的核心环节。你是否遇到过这些问题&#xff1a; 在本地装了一堆数据库工具&#xff0c;来回切换麻烦又低效&#xff1f;想调试 SQL 语句&#xff0c;还要先配置各种环境&am…...

Mybatis-plus 主键自增值与数据库主键自增值不一致

数据库表的自增值为 100 但是在 java 项目中向数据库插入一天数据后报错&#xff1a; org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property id of class com.wf.dao.pojo.Article with…...

数据清洗到底在清洗什么?

在大数据时代&#xff0c;数据是每个企业的五星资产&#xff0c;被誉为“新石油”&#xff0c;但未经处理的数据往往参杂着大量“杂质”。这些“脏数据”不仅影响分析结果&#xff0c;严重的甚至误导企业决策。数据清洗作为数据预处理的关键环节&#xff0c;正是通过“去芜存菁…...

shell编程之正则表达式

目录 1&#xff0c;正则表达式的定义 2&#xff0c;正则表达式用途 正则表达式的常用选项及示例&#xff08;grep为例&#xff09;&#xff1a; sed基本语法及常用选项&#xff1a; awk的基本语句及常用选项&#xff1a; 扩展正则表达式(egrep) 元字符总结&#xff1a; …...

每日一题-力扣-2537. 统计好子数组的数目 0416

LeetCode 2537. 统计好子数组的数目 问题描述 给定一个整数数组nums和一个整数k&#xff0c;定义"好子数组"为包含至少k对相等元素的子数组。任务是计算数组中所有"好子数组"的数量。 两个相等的元素构成一对&#xff0c;例如数组[1,1,1]中有3对(1,1)&am…...

遨游防爆手机:构筑煤矿安全通讯的数字护盾

在煤炭、石油、化工等危险作业场景中&#xff0c;安全生产始终是企业发展的生命线。面对复杂多变的生产环境&#xff0c;传统的通讯设备已难以满足现代工业对安全性、可靠性和智能化的严苛要求。遨游通讯作为国内领先的防爆通讯设备制造商&#xff0c;凭借其核心科技自主研发的…...

进程通信详解

进程间通信&#xff08;IPC&#xff09;详解&#xff1a;原理、方式与使用场景全解析 摘要 进程间通信&#xff08;IPC&#xff09;是操作系统中用于实现多个独立进程之间数据交换和资源协作的重要机制。本文系统地讲解了 IPC 的基本概念、设计目标和系统实现原理&#xff0c;…...

《What Are Step-Level Reward Models Rewarding?》全文翻译

《What Are Step-Level Reward Models Rewarding?Counterintuitive Findings from MCTS-Boosted Mathematical Reasoning》 Step-Level奖励模型到底奖励了什么&#xff1f;来自基于MCTS提升的数学推理的反直觉发现 摘要 Step-level奖励模型&#xff08;SRMs&#xff09;通过…...

windows使用docker-desktop安装milvus和可视化工具attu

这里写目录标题 docker-desktop安装docker安装milvusdocker安装milvus可视化工具attu注意点 docker-desktop安装 参考&#xff1a;Windows Docker 安装 docker安装milvus 参考&#xff1a;添加链接描述在 Docker 中运行 Milvus&#xff08;Windows&#xff09; docker安装m…...

如何通过原型链实现方法的“重写”(Override)?

在 JavaScript 中&#xff0c;通过原型链实现方法的 “重写”&#xff08;Override&#xff09; 的核心思路是&#xff1a;在子类&#xff08;或子对象&#xff09;的原型链上定义同名方法&#xff0c;覆盖父类&#xff08;或父对象&#xff09;的方法。以下是具体实现步骤和代…...

PyTorch - Tensor 学习笔记

上层链接&#xff1a;PyTorch 学习笔记-CSDN博客 Tensor 初始化Tensor import torch import numpy as np# 1、直接从数据创建张量。数据类型是自动推断的 data [[1, 2],[3, 4]] x_data torch.tensor(data)torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])输出&am…...

《协议栈的骨架:从Web请求到比特流——详解四层架构的可靠传输与流量控制》

前言 本篇博客将详细介绍网络原理&#xff08;细~~~&#xff09; &#x1f496; 个人主页&#xff1a;熬夜写代码的小蔡 &#x1f5a5; 文章专栏 若有问题 评论区见 &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 ​ ​​ ​​ 一.应用层 这里的应用层只是个开头&a…...

软考 系统架构设计师系列知识点 —— 设计模式之创建者模式

本文内容参考&#xff1a; 软考 系统架构设计师系列知识点之设计模式&#xff08;2&#xff09;_系统架构设计师中考设计模式吗-CSDN博客 创建者模式_百度百科 建造者模式_百度百科 https://zhuanlan.zhihu.com/p/551870461 特此致谢&#xff01; Builder Pattern&#xf…...

oracle判断同表同条件查出两条数据,根据长短判断差异

目标&#xff1a;同一个物料&#xff0c;账套不同&#xff0c;排查同料号有差异的规格名称 在Oracle数据库中&#xff0c;如果你想查询同一张表中两条数据某个字段的长度不同的情况&#xff0c;你可以使用JOIN语句或者窗口函数&#xff08;如ROW_NUMBER()、RANK()、DENSE_RANK…...

咋用fliki的AI生成各类视频?AI生成视频教程

最近想制作视频&#xff0c;多方考查了决定用fliki&#xff0c;于是订阅了一年试试&#xff0c;这个AI生成的视频效果来看真是不错&#xff0c;感兴趣的自己官网注册个账号体验一下就知道了。 fliki官网 Fliki生成视频教程 创建账户并登录 首先&#xff0c;访问fliki官网并注…...

【STM32-代码】

STM32-代码 ■ printf() 输出到uart1■■■ ■ printf() 输出到uart1 static UART_HandleTypeDef * g_HDebugUART &huart1;int fputc(int c, FILE *f) {(void)f;HAL_UART_Transmit(g_HDebugUART, (const uint8_t *)&c, 1, DEBUG_UART_TIMEOUT);return c; }int fgetc…...

用cursor三个小时复刻高德地图的足迹地图

用cursor三个小时复刻了高德地图的足迹地图&#xff0c;当然&#xff0c;是“低配”版的。 1、首先要初始化&#xff0c;提出一个需求&#xff0c;让它自由发挥 运行之后发现它报错了&#xff0c;原因出在这行代码&#xff0c;“https://cdn.jsdelivr.net/npm/echarts5,4.3/…...