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開發者提供一些有益的參考和借鑒。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79721.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79721.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79721.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

12.第二階段x64游戲實戰-遠程調試

免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動! 本次游戲沒法給 內容參考于:微塵網絡安全 上一個內容:11.第二階段x64游戲實戰-框架代碼細節優化 本次寫的內容是關于調試、排錯相關的…

c++基礎三

1.繼承 繼承表示,子類可以獲取父類的屬性和方法,然后可以寫子類獨有的屬性和方法,或者修改父類的方法。類可以繼承父類的公共成員(public),但不能繼承私有成員(private),私有成員只能在父類內部訪問。 1.1 案例一單繼承 #include <iostream>using namespace …

JSON學習筆記

文章目錄 1. JSON是什么2. JSON的特點與結構3. JSON的使用4. JSON文件讀取 1. JSON是什么 JSON&#xff08;JavaScript Object Notation&#xff0c;JavaScript對象表示法&#xff09;是一種輕量級的數據交換格式&#xff0c;易于人閱讀和編寫&#xff0c;同時也易于機器解析和…

王牌學院,25西電通信工程學院(考研錄取情況)

1、通信工程學院各個方向 2、通信工程學院近三年復試分數線對比 學長、學姐分析 由表可看出&#xff1a; 1、信息與通信工程25年相較于24年上升5分、軍隊指揮學25年相較于24年上升30分 2、新一代電子信息技術&#xff08;專碩&#xff09;25年相較于24年下降25分、通信工程&…

WPF依賴注入IHostApplicationLifetime關閉程序

WPF依賴注入IHostApplicationLifetime關閉程序 使用Application.Current.Shutdown();退出會報異常 應該使用 app.Dispatcher.InvokeShutdown(); Application.Current.Shutdown();app.Dispatcher.InvokeShutdown();static App app new();[STAThread]public static void Main(…

Jenkins 代理自動化-dotnet程序

兩種方式 容器部署 本地部署 容器部署 可自動實現&#xff0c;服務器重啟&#xff0c;容器自動運行 主要將dockerfile 寫好 本地部署 1.服務器重啟自動運行代理 參考下面的鏈接&#xff0c;只是把程序換成 java程序&#xff0c;提前確認好需要的jdk版本 Ubuntu20.04 設置開機…

從Archery到NineData:積加科技驅動數據庫研發效能與數據安全雙升級

積加科技作為國內領先的企業級數字化解決方案服務商&#xff0c;依托自研的 A4X 數字化平臺&#xff08;https://a4x.io/&#xff09;&#xff0c;專注于為全球范圍內的視覺物聯網&#xff08;IoT&#xff09;設備提供 PaaS/SaaS 服務。致力于運用 AI 技術賦能物聯網世界的各類…

SpringBoot整合Logback日志框架深度實踐

一、依賴與默認集成機制 SpringBoot從2.x版本開始默認集成Logback日志框架,無需手動添加額外依賴。當項目引入spring-boot-starter-web時,該組件已包含spring-boot-starter-logging,其底層實現基于Logback+SLF4J組合。這種設計使得開發者只需關注業務日志的輸出規則,無需處…

自由學習記錄(56)

從貼圖空間&#xff08;texture space&#xff09;將值還原到切線空間&#xff08;tangent space&#xff09;向量 tangentNormal.xy (packedNormal.xy * 2 - 1) * _BumpScale; 背后的知識點&#xff1a;法線貼圖中的 RGB 是在 0~1 范圍內編碼的向量 所以貼圖法線是怎么“壓…

【mysql】mysql疑難問題:實際場景解釋什么是排它鎖 當前讀 快照讀

注&#xff1a; 理解本文 前置需要掌握的基礎知識&#xff1a;事務隔離、鎖的概念、并發知識&#xff1b; 事務隔離 尤其是事務延伸問題 是個重難點&#xff0c;絕非八股文那幾句話就能說完的&#xff0c;在實際場景中&#xff0c;分析起來有一定難度 author: csdn博主 孟秋與你…

Python:使用web框架Flask搭建網站

Date: 2025.04.19 20:30:43 author: lijianzhan Flask 是一個輕量級的 Python Web 開發框架&#xff0c;以簡潔靈活著稱&#xff0c;適合快速構建中小型 Web 應用或 API 服務。以下是 Flask 的核心概念、使用方法和實踐指南 Flask 的核心特點&#xff1a; 輕量級 核心代碼僅約…

層次式架構核心:中間層的功能、優勢與技術選型全解析

層次式架構中的中間層是整個架構的核心樞紐&#xff0c;承擔著多種重要職責&#xff0c;在功能實現、優勢體現以及技術選型等方面都有豐富的內容&#xff0c;以下為你詳細介紹&#xff1a; 一、功能 1.業務邏輯處理 復雜規則運算&#xff1a;在許多企業級應用中&#xff0c;…

網絡--應用層自定義協議與序列化

目錄 4-1 應用層 4-2 重新理解 read、write、recv、send 和 tcp 為什么支持全雙工 4-3 開始實現 4-1 應用層 我們程序員寫的一個個解決我們實際問題 , 滿足我們日常需求的網絡程序 , 都是在應用 層 . 再談 " 協議 " 協議是一種 " 約定 ". socke…

fastlio用mid360錄制的bag包離線建圖,提示消息類型錯誤

我用mid360錄制的bag包&#xff0c;激光雷達的數據類型是sensor_msgs::PointCloud2&#xff0c;但是運行fast_lio中的mid360 launch文件&#xff0c;會報錯&#xff08;沒截圖&#xff09;&#xff0c;顯示無法從livox_ros_driver2::CustomMsg轉換到sensor_msgs::PointCloud2。…

C# WinForm窗口TextBox控件只能輸入數字(包括小數)并且恢復Ctrl+C復制和Ctrl+V粘貼功能

1. 前言 最近在寫定GPS定位時&#xff0c;經緯度是用的double類型&#xff0c;并且經緯度的要求是小數點后最少6位&#xff0c;多了能達到17位&#xff0c;又遇到了常用的TextBox控件只能輸入數字、小數的功能&#xff0c;因為有一年多沒有寫程序&#xff0c;現在再來寫這些感…

【MySQL數據庫】數據類型

目錄 1&#xff0c;數據類型分類 2&#xff0c;bit類型 3&#xff0c;小數類型 3-1&#xff0c;float/double類型 3-2&#xff0c;decimal類型 4&#xff0c;字符串類型 4-1&#xff0c;char 4-2&#xff0c;varchar 5&#xff0c;日期和時間類型 6&#xff0c;enum和…

Spark-SQL核心編程2

路徑問題 相對路徑與絕對路徑&#xff1a;建議使用絕對路徑&#xff0c;避免復制粘貼導致的錯誤&#xff0c;必要時將斜杠改為雙反斜杠。 數據處理與展示 SQL 風格語法&#xff1a;創建臨時視圖并使用 SQL 風格語法查詢數據。 DSL 風格語法&#xff1a;使用 DSL 風格語法查詢…

pandas庫詳解

CONTENT 基本數據結構SeriesDataFrame 數據讀取與寫入讀取 CSV 文件寫入 CSV 文件 數據清洗處理缺失值數據類型轉換 數據操作索引與切片數據合并數據分組與聚合 數據可視化 基本數據結構 Series Series 屬于一維標記數組&#xff0c;由一組數據和對應的索引構成。 import pa…

黑馬商城(五)微服務保護和分布式事務

一、雪崩問題 二、雪崩-解決方案&#xff08;服務保護方案&#xff09; 請求限流&#xff1a; 線程隔離&#xff1a; 服務熔斷&#xff1a; 服務保護組件&#xff1a; 三、Sentinel 引入依賴&#xff1a; <!--sentinel--> <dependency><groupId>com.aliba…

洛谷P1312 [NOIP 2011 提高組] Mayan 游戲

題目 #算法/進階搜索 思路: 根據題意,我們可以知道,這題只能枚舉,剪枝,因此,我們考慮如何枚舉,剪枝. 首先,我們要定義下降函數down(),使得小木塊右移時,能夠下降到最低處,其次,我們還需要寫出判斷函數,判斷矩陣內是否有小木塊沒被消除.另外,我們還需要消除函數,將矩陣內三個相連…