ArkUI:鴻蒙應用響應式與組件化開發指南(一)

文章目錄

  • 引言
  • 1.ArkUI核心能力概覽
    • 1.1狀態驅動視圖
    • 1.2組件化:構建可復用UI
  • 2.狀態管理:從單一組件到全局共享
    • 2.1 狀態裝飾器
    • 2.2 狀態傳遞模式對比

引言

鴻蒙生態正催生應用開發的新范式。作為面向全場景的分布式操作系統,鴻蒙的北向應用開發是連接用戶與智能體驗的關鍵。ArkUI框架,作為鴻蒙UI開發的利器,以其響應式編程、組件化架構和松耦合通信,為開發者提供了前所未有的高效與可維護性。它讓開發者能更專注于業務邏輯,而非繁瑣的界面細節。本文將聚焦于鴻蒙北向應用開發的核心實踐,通過代碼示例和架構圖解,詳解狀態管理、組件化設計及性能優化,助您快速掌握ArkUI開發精髓。

1.ArkUI核心能力概覽

1.1狀態驅動視圖

ArkUI徹底告別了傳統命令式UI開發中繁瑣的DOM操作。它引入了一種全新的范式:響應式機制。其核心思想是“視圖是狀態的函數”——這意味著開發者只需專注于管理狀態,當狀態發生變化時,視圖便會像魔術般自動更新。這種模式極大地減少了手動干預DOM的復雜度,從根本上避免了因手動操作失誤導致的狀態與視圖不同步的棘手問題。
計數器:

@Component
struct Counter {@Observed count: number = 0; // 響應式狀態@State isActive: boolean = true; // 組件內部狀態build() {Column() {Text(`Count: ${this.count}`) // 狀態綁定到視圖.fontSize(24).if(this.isActive) // 條件渲染Button('Increment').onClick(() => {this.count += 1; // 狀態變更觸發視圖刷新})}}
}

1.2組件化:構建可復用UI

通過@Component裝飾器,開發者可將UI拆解為高復用的組件單元,支持嵌套組合與參數化配置。
核心特性
模塊化:每個組件獨立維護狀態與邏輯。
可組合:通過嵌套組合構建復雜界面。
參數化:通過@Param注入外部數據。
用戶卡片組件

@Component
struct UserCard {@Param user: { name: string; avatar: string }; // 外部參數注入build() {Row() {Image(this.user.avatar).width(160).height(160).borderRadius(30)Text(this.user.name).fontSize(16).margin({ left: 12 })}}
}// 使用示例
@Component
struct App {build() {Column() {UserCard({ user: { name: 'A', avatar: '/images/xx.png' } })UserCard({ user: { name: 'B', avatar: '/images/xx.png' } })}}
}

2.狀態管理:從單一組件到全局共享

2.1 狀態裝飾器

ArkUI提供多種狀態裝飾器,覆蓋不同作用域與生命周期:
裝飾器 作用域 典型場景
@Observed 全局/共享狀態 跨組件狀態同步(如用戶登錄信息)
@State 組件內部狀態 組件生命周期內的本地狀態(如彈窗開關)
@Provide 父組件狀態提供 向下傳遞可訂閱的狀態
@Consume 子組件狀態訂閱 接收父組件提供的狀態
@Trace 調試輔助 追蹤狀態變更路徑,優化性能

2.2 狀態傳遞模式對比

按值傳遞 vs 按引用傳遞
按值傳遞:靜態數據,無響應式,適合配置項。
按引用傳遞:動態綁定,響應式,適合共享狀態。
代碼示例:狀態傳遞對比

// 按值傳遞(靜態數據)
@Component
struct StaticLabel {@Param label: string; // 父組件傳遞的值不可變build() { Text(this.label).fontSize(20) }
}// 按引用傳遞(動態綁定)
class UserState { @Observed name: string = 'Guest'; }
@Component
struct Greeting {@Provide userState: UserState = new UserState(); // 全局狀態build() {Button('Login').onClick(() => { this.userState.name = 'John'; })Text(`Hello, ${this.userState.name}`); // 狀態變更自動刷新}
}

跨組件通信模式
父子組件通信:

@Component
struct Parent {@Provide sharedValue: number = 42; // 父組件提供狀態build() { Child() } // 子組件通過@Consume訂閱
}@Component
struct Child {@Consume sharedValue: number; // 訂閱父組件狀態build() { Text(`Value: ${this.sharedValue}`) }
}
事件總線(松耦合通信):
typescript
class EventBus {static emit(event: string, data: any) { /* 事件分發 */ }static on(event: string, callback: Function) { /* 事件訂閱 */ }
}@Component
struct Publisher {build() {Button('Emit Event').onClick(() => {EventBus.emit('customEvent', { key: 'value' });})}
}@Component
struct Subscriber {onInit() {EventBus.on('customEvent', (data) => {console.log('Received:', data); // 處理事件數據});}build() { Text('Waiting for event...') }
}

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

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

相關文章

List優雅分組

一、前言 最近小永哥發現,在開發過程中,經常會遇到需要對list進行分組,就是假如有一個RecordTest對象集合,RecordTest對象都有一個type的屬性,需要將這個集合按type屬性進行分組,轉換為一個以type為key&…

AI與.NET技術實操系列(八):使用Catalyst進行自然語言處理

引言 自然語言處理(Natural Language Processing, NLP)是人工智能領域中最具活力和潛力的分支之一。從智能客服到機器翻譯,再到語音識別,NLP技術正以其強大的功能改變著我們的生活方式和工作模式。 Catalyst的推出極大降低了NLP…

MySQL 8.0 OCP 1Z0-908 題目解析(13)

題目49 Choose the best answer. t is a non - empty InnoDB table. Examine these statements, which are executed in one session: BEGIN; SELECT * FROM t FOR UPDATE;Which is true? ○ A) mysqlcheck --analyze --all - databases will execute normally on all ta…

Docker 一鍵部署倒計時頁面:Easy Countdown全設備通用

Easy Countdown 介紹 Easy countdown是一個易于設置的倒計時頁面。可以設置為倒計時或計時器。可用于個人生活、工作管理、教育、活動策劃等多個領域。 🚢 項目地址 Github:https://github.com/Yooooomi/easy-countdown 🚀Easy Countdown …

Python訓練打卡Day35

模型可視化與推理 知識點回顧: 三種不同的模型可視化方法:推薦torchinfo打印summary權重分布可視化進度條功能:手動和自動寫法,讓打印結果更加美觀推理的寫法:評估模式 模型結構可視化 理解一個深度學習網絡最重要的2點…

四、生活常識

一、效應定律 效應 1、沉沒成本效應 投入的越多,退出的難度就越大,因為不甘心自己之前的所有付出都付之東流。 2、破窗效應 干凈的環境下,沒有人會第一個丟垃圾,但是當環境變得糟糕,人們就開始無所妒忌的丟垃圾。…

機器學習圣經PRML作者Bishop20年后新作中文版出版!

機器學習圣經PRML作者Bishop20年后新書《深度學習:基礎與概念》出版。作者克里斯托弗M. 畢曉普(Christopher M. Bishop)微軟公司技術研究員、微軟研究 院 科學智 能 中 心(Microsoft Research AI4Science)負責人。劍橋…

Python應用嵌套猜數字小游戲

大家好!今天向大家分享的是有關“嵌套”的猜數字小游戲。希望能夠幫助大家理解嵌套。 代碼呈現: # 1. 構建一個隨機的數字變量 import random num random.randint(1, 10)guess_num int(input("輸入你要猜測的數字: "))# 2. 通過if判斷語句進行數字的猜…

黑馬k8s(十四)

1.Service-概述 service:用于四層路由的負載,Ingress七層路由的負載;,先學習service 開啟ipvs 2.Service-資源清單文件介紹 修改每個顯示的內容 ClusterIP類型的Service Endpoints:建立service與pod關聯 親和性測試…

Kotlin 中 Lambda 表達式的語法結構及簡化推導

在 Kotlin 編程中,Lambda 表達式是一項非常實用且強大的功能。今天,我們就來深入探討一下 Lambda 表達式的語法結構,以及它那些令人 “又愛又恨” 的簡化寫法。 一、Lambda 表達式完整語法結構 Lambda 表達式最完整的語法結構定義為{參數名…

Kafka Streams 和 Apache Flink 的無狀態流處理與有狀態流處理

Kafka Streams 和 Apache Flink 與數據庫和數據湖相比的無狀態和有狀態流處理的概念和優勢。 在數據驅動的應用中,流處理的興起改變了我們處理和操作數據的方式。雖然傳統數據庫、數據湖和數據倉庫對于許多基于批處理的用例來說非常有效,但在要求低延遲…

【后端高階面經:緩存篇】34、高并發下緩存穿透、擊穿、雪崩怎么解決

一、緩存三大核心問題:穿透、擊穿、雪崩的本質區別 (一)概念對比表 問題類型核心特征典型場景危害等級緩存穿透數據在緩存和數據庫中均不存在,請求直接穿透到數據庫惡意攻擊(偽造不存在的ID)、業務邏輯漏洞★★★★★緩存擊穿熱點數據在緩存中過期,大量并發請求同時擊穿…

使用Rancher在CentOS 環境上部署和管理多Kubernetes集群

引言 隨著容器技術的迅猛發展,Kubernetes已成為容器編排領域的事實標準。然而,隨著企業應用規模的擴大,多集群管理逐漸成為企業IT架構中的重要需求。 Rancher作為一個開源的企業級多集群Kubernetes管理平臺,以其友好的用戶界面和…

【Mini-F5265-OB開發板試用測評】按鍵控制測試

本文介紹了如何使用按鍵控制 MCU 引腳的輸出電平。 原理 由原理圖可知 板載用戶按鍵 K1 和 K2 分別與主控的 PB0 和 PB1 相連。 代碼 #define _MAIN_C_#include "platform.h" #include "gpio_key_input.h" #include "main.h"int main(void) …

用C#最小二乘法擬合圓形,計算圓心和半徑

用C#最小二乘法擬合圓形&#xff0c;計算圓心和半徑 using System; using System.Collections.Generic;namespace ConsoleApp2 {internal class Program{static void Main(string[] args){List<Tuple<double, double>> points new List<Tuple<double, doubl…

四、web安全-行業術語

1. 肉雞 所謂“肉雞”是一種很形象的比喻&#xff0c;比喻那些可以隨意被我們控制的電腦&#xff0c;對方可以是WINDOWS系統&#xff0c;也可以是UNIX/LINUX系統&#xff0c;可以是普通的個人電腦&#xff0c;也可以是大型的服務器&#xff0c;我們可以象操作自己的電腦那樣來…

MYSQL丟失pid處理方式

1、停止服務器 systemctl stop mysqld 2、修改 /data/mysql/etc/my.cnf pid-file /tmp/mysql/mysql.pid 改為 pid-file /data/mysql/mysql.pid 3、創建 touch /data/mysql/mysql.pid ch…

《計算機組成原理》第 2 章 - 計算機的發展及應用?

計算機從誕生至今&#xff0c;經歷了翻天覆地的變化&#xff0c;應用領域也在不斷拓展。本文將結合 Java 代碼實例&#xff0c;帶你深入了解計算機的發展歷程、應用場景及未來展望&#xff0c;讓你在學習理論的同時&#xff0c;還能通過實踐加深理解。? 2.1 計算機的發展史? …

Github 2025-05-26 開源項目周報Top15

根據Github Trendings的統計,本周(2025-05-26統計)共有15個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Python項目5TypeScript項目3JavaScript項目3C++項目2Roff項目1Go項目1C#項目1Jupyter Notebook項目1Rust項目1CSS項目1Shell項目1Dockerfile項目…

詳解MYSQL索引失效問題排查

目錄 一、快速定位索引失效的步驟 1. 使用 EXPLAIN 分析執行計劃詳解Mysql的Explain語句 2. 確認索引是否存在 3. 檢查查詢條件是否符合索引規則 二、常見索引失效場景及解決方法 1. 索引列參與計算或函數 2. 隱式類型轉換 3. 使用 LIKE 以通配符開頭 4. 使用 OR 連接…