HarmonyOS 鴻蒙應用開發基礎:父組件和子組件的通信方法總結

在鴻蒙開發中,ArkUI聲明式UI框架提供了一種現代化、直觀的方式來構建用戶界面。然而,由于其聲明式的特性,父組件與子組件之間的通信方式與傳統的命令式框架有所不同。本文旨在詳細探討在ArkUI框架中,父組件和子組件通信的方法總結,以幫助開發者更好地理解和應用這些機制。

在鴻蒙ArkUI聲明式UI框架中,父組件和子組件之間的通信主要有以下幾種方式:

1. @Link裝飾器 - 雙向數據同步

  • 特點:實現父子組件間的雙向數據綁定
  • 使用場景:當需要在父子組件間保持數據同步時
  • 示例
// 父組件
@Component
struct Parent {@State count: number = 0;build() {Column() {Child({ count: $count })  // 使用$傳遞狀態變量}}
}// 子組件
@Component
struct Child {@Link count: number;  // 接收父組件的狀態變量build() {Button(`Count: ${this.count}`).onClick(() => {this.count++;  // 可以直接修改,會同步到父組件})}
}

2. @Prop裝飾器 - 單向數據同步

  • 特點:父組件到子組件的單向數據傳遞
  • 使用場景:當子組件只需要讀取父組件數據,不需要修改時
  • 示例
// 父組件
@Component
struct Parent {@State message: string = "Hello";build() {Column() {Child({ message: this.message })}}
}// 子組件
@Component
struct Child {@Prop message: string;  // 只能讀取,不能修改build() {Text(this.message)}
}

3. @Provide/@Consume裝飾器 - 跨組件通信

  • 特點:支持跨多層組件的數據傳遞
  • 使用場景:當需要在多層組件間共享數據時
  • 示例
// 父組件
@Component
struct Parent {@Provide message: string = "Hello";build() {Column() {Child()}}
}// 子組件
@Component
struct Child {@Consume message: string;build() {Text(this.message)}
}

4. @Watch裝飾器 - 數據變化監聽

  • 特點:監聽數據變化并執行回調
  • 使用場景:需要在數據變化時執行特定操作
  • 示例
@Component
struct Child {@Link @Watch('onCountChange') count: number;onCountChange() {console.log(`Count changed to: ${this.count}`);}
}

5. 事件回調 - 子組件到父組件通信

  • 特點:通過事件觸發父組件的方法
  • 使用場景:子組件需要通知父組件執行某些操作
  • 示例
// 父組件
@Component
struct Parent {onChildEvent(data: string) {console.log(`Received from child: ${data}`);}build() {Column() {Child({ onEvent: this.onChildEvent })}}
}// 子組件
@Component
struct Child {onEvent: (data: string) => void;build() {Button('Trigger Event').onClick(() => {this.onEvent('Hello from child');})}
}

6. @ObjectLink裝飾器 - 對象類型數據同步

  • 特點:用于同步對象類型的屬性變化
  • 使用場景:當需要同步復雜對象數據時
  • 示例
@Observed
class User {name: string;age: number;
}@Component
struct Child {@ObjectLink user: User;build() {Text(`Name: ${this.user.name}, Age: ${this.user.age}`)}
}

各種通信方式對比

方式數據流向裝飾器適用場景代碼復雜度
雙向綁定父?子@Link表單控件等需要雙向同步★★☆
單向傳遞父→子@Prop展示型組件數據傳遞★☆☆
跨級通信任意→子@Provide/@Consume主題/配置等全局狀態★★☆
狀態監聽變化觸發@Watch數據變化執行副作用★★☆
事件通知子→父-子組件觸發父組件邏輯★★☆
對象同步父?子@ObjectLink復雜對象數據同步★★★

選擇建議

  1. 如果需要雙向數據同步,使用@Link
  2. 如果只需要單向數據傳遞,使用@Prop
  3. 如果需要跨多層組件通信,使用@Provide/@Consume
  4. 如果需要監聽數據變化,使用@Watch
  5. 如果子組件需要觸發父組件操作,使用事件回調
  6. 如果需要同步復雜對象數據,使用@ObjectLink

這些通信方式各有特點,開發者可以根據具體需求選擇合適的方式。在實際開發中,這些方式可以組合使用,以實現更復雜的組件通信需求。

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

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

相關文章

深度學習模塊縫合拼接方法套路+即插即用模塊分享

前言 在深度學習中,模型的設計往往不是從頭開始,而是通過組合不同的模塊來構建。這種“模塊縫合”技術,就像搭積木一樣,把不同的功能模塊拼在一起,形成一個強大的模型。今天,我們就來聊聊四種常見的模塊縫…

計算機網絡(2)——應用層

1.應用層概述 應用層(Application Layer)屬于計算機網絡體系結構中的最頂層,直接面向用戶,提供各種網絡服務和應用程序的接口 本文主要的學習內容如下: (1)網絡應用進程通信方式 客戶端-服務器方式點對點方式混合方式 (2)網絡應用的需求與傳輸…

Android 繪制折線圖

用了一段時間的 Jetpack Compose ,感覺寫 UI 的效率確實會提升不少 。 配合 AI 編程繪制了一個折線圖。供大家學習參考! @Composable fun TemperatureChart() {val timeLabels = listOf("7:00", "8:00", "9:00", "10:00", "11:…

JavaScript- 1.3 DOM對頁面內容進行操作

本系列可作為前端學習系列的筆記,代碼的運行環境是在HBuilder中,小編會將代碼復制下來,大家復制下來就可以練習了,方便大家學習。 HTML和CSS系列文章 已經收錄在前端專欄,有需要的寶寶們可以點擊前端專欄查看&#xff…

CSS-5.1 Transition 過渡

本系列可作為前端學習系列的筆記,代碼的運行環境是在HBuilder中,小編會將代碼復制下來,大家復制下來就可以練習了,方便大家學習。 HTML系列文章 已經收錄在前端專欄,有需要的寶寶們可以點擊前端專欄查看! 點…

使用Google 最新發布的veo-3 視頻生成和數字人技術制作介紹核聚變技術的短視頻:《逐夢星海:中國聚變照亮未來》

文章大綱 結合谷歌最新模型說明示例分鏡提示詞(基于 Gemini 2.5)最終視頻生成(基于 Veo3)解說詞文稿應用場景參考文獻先來看看效果: 視頻中混入了一些字幕,看來Google的技術還有待提高哈,里面有的托卡馬克好像挺像那么回事!厲害 逐夢星海:中國聚變照亮未來 #mermaid-sv…

服務器數據恢復—Linux系統服務器崩潰且重裝系統的數據恢復案例

服務器數據恢復環境: linux操作系統服務器中有一組由4塊SAS接口硬盤組建的raid5陣列。 服務器故障: 服務器工作過程中突然崩潰。管理員將服務器操作系統進行了重裝。 用戶方需要恢復服務器中的數據庫、辦公文檔、代碼文件等。 服務器數據恢復過程&#…

結構型:門面模式(外觀模式)

目錄 1、核心思想 2、實現方式 2.1 模式結構 2.2 實現案例 3、優缺點分析 4、適用場景 1、核心思想 目的:通過高層接口(門面類)封裝多個子系統的復雜交互,客戶端只需與門面交互,簡化入口;同時隔離客…

MidJourney生成王昭君全身像提示詞

漢服王昭君全身像,中國水墨融合工筆畫風格,低飽和度暖色調,絹本設質感: 服飾細節:身著朱紅色曲裾深衣,衣擺拖地三層,金線刺繡鳳凰祥云暗紋,寬袖綴珍珠滾邊,腰間白玉組佩…

GitHub 趨勢日報 (2025年05月21日)

本日報由 TrendForge 系統生成 https://trendforge.devlive.org/ 🌐 本日報中的項目描述已自動翻譯為中文 📈 今日整體趨勢 Top 10 排名項目名稱項目描述今日獲星總星數語言1microsoft/WSLLinux的Windows子系統? 1731? 25184C2virattt/ai-hedge-fundA…

電子電氣架構 --- 細化造車階段流程

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 鈍感力的“鈍”,不是木訥、遲鈍,而是直面困境的韌勁和耐力,是面對外界噪音的通透淡然。 生活中有兩種人,一種人格外在意別人的眼光;另一種人無論…

談談Oracle BUFFER CACHE的命中率

BUFFER CACHE的命中率已成為一個老生常談的話題,在數據庫等待事件出現之前,DBA進行數據庫系統級優化時,往往會首先觀察BUFFER CACHE的命中率。命中率高就意味著數據庫運行正常,很多Oracle官方提供的巡檢腳本都將BUFFER CACHE的命中…

云渲染技術解析與渲酷平臺深度測評:如何實現高效3D創作?

一、云渲染技術核心原理 1.1 分布式計算架構 云渲染的本質是通過多節點并行計算實現效率突破。以動畫渲染為例,一個30秒的動畫通常包含720幀(按24幀/秒計算),傳統單機需要連續處理所有幀,而云渲染可將任務拆解為720個…

JavaScript-DOM-02

自定義屬性&#xff1a; ? <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>…

Kind方式部署k8s單節點集群并創建nginx服務對外訪問

資源要求 請準備好doker環境&#xff0c;盡量用比較新的版本。我的docker環境如下 docker 環境&#xff1a; Docker version 20.10.21, build 20.10.21-0ubuntu1~18.04.3 安裝kind kind表現上就是一個二進制程序&#xff0c;下載對應版本并增加執行權限即可&#xff1a; cu…

MySQL備份恢復:數據安全的終極指南

引言 各位數據庫愛好者們好&#xff01;今天我們要深入探討MySQL數據庫的"生命保險"——備份與恢復策略 &#x1f6e1;?。在數據即資產的時代&#xff0c;任何數據丟失都可能造成災難性后果。本教程將帶你全面掌握從邏輯備份到物理備份&#xff0c;從二進制日志恢復…

id分頁遍歷數據漏行問題

令入參id為0 while(true){ select * from table where id>#{id} order by id asc limit 100; 取結果集中最大id作為下次查詢的入參 其他操作 } 這個算法一般沒問題&#xff0c;但在主從數據系統中&#xff0c;主庫寫&#xff0c;查詢從庫遍歷數據時&#xff0c;出現了…

OpenCV級聯分類器

概念 OpenCV 級聯分類器是一種基于 Haar 特征、AdaBoost 算法和級聯結構的目標檢測方法&#xff0c;通過多階段篩選快速排除非目標區域&#xff0c;實現高效實時檢測&#xff08;如人臉、行人等&#xff09;。 加載級聯分類器 // 加載級聯分類器CascadeClassifier cascade;// …

C++ inline 內聯函數

一、定義與設計初衷 inline 函數是 C 中通過 減少函數調用開銷 優化程序效率的機制。其核心設計初衷是 取代 C 語言中宏定義&#xff08;#define&#xff09;&#xff0c;同時解決宏的以下缺陷&#xff1a; 類型安全問題&#xff1a;宏僅進行文本替換&#xff0c;無法進行參數…

uniapp-商城-64-后臺 商品列表(商品修改---頁面跳轉,深淺copy應用,遞歸調用等)

完成了商品的添加和展示&#xff0c;下面的文字將繼續進行商品頁面的處理&#xff0c;主要為商品信息的修改的頁面以及后天邏輯的處理。 本文主要介紹了商品信息修改頁面的實現過程。首先&#xff0c;頁面布局包括編輯和刪除功能&#xff0c;未來還可添加上架和下架按鈕。通過c…