小白挑戰一周上架元服務——ArkUI04

文章目錄

  • 前言
  • 一、ArkUI是何方神圣?
  • 二、聲明式UI
  • 三、組件
    • 1.基礎組件
    • 2.布局容器組件
    • 3.導航組件
    • 4.自定義組件
    • 5.組件生命周期
  • 四、狀態管理
    • 1.@State裝飾器: 狀態變量
    • 2.@Prop裝飾器:父子單向同步
    • 3.@Link裝飾器:父子雙向同步
    • 4.@Provide/@Consume裝飾器:跨層級傳遞
    • 5.@Observed/@ObjectLink裝飾器:嵌套類對象屬性變化
  • 五、路由/導航
    • 1.組件導航
    • 2.Router頁面路由
  • 參考


前言

我們前面進行了了解元服務、IDE、ArkTS,目前前期準備工作已經差不了。我們可以進行學習UI階段了。距離實現元服務上架,又是一個里程碑式的進展。奧利給~


一、ArkUI是何方神圣?

ArkUI即方舟UI框架,提供了一套完整的基礎設施,包括簡潔的UI語法、豐富的UI功能(豐富的組件、布局、動畫以及交互事件),以及實時界面預覽工具(雙向預覽),支持開發者進行豐富頁面的開發。

在這里插入圖片描述
ArkUI基于關鍵的應用UI開發底座,深度融合語言/編輯器/圖形。
在這里插入圖片描述

二、聲明式UI

通過聲明UI結構和狀態,自動驅動界面渲染。開發者只需描述“界面應該是什么樣”,無需手動管理UI更新。適用于復雜度較高、團隊協作的應用開發,具有高開發效率、良好性能和易維護等優勢。

  • 通過數據驅動UI發生變化,UI與業務邏輯分離,更直觀、更高效。
    在這里插入圖片描述

三、組件

組件是構成UI界面的最小單位,如列表、網格、按鈕、單選框、按鈕、文本等。
組件有無參數組件和有參數組件,有特有的屬性和事件以及子組件。

  • 組件類型:分為無參數組件和有參數組件。
      /// 有參數組件Text('Hello!')/// 無參數組件Blank()
  • 屬性,例如Text的fontColor屬性
     Text(this.message).fontColor(Color.Orange)
  • 事件
   Button('Click').onClick(() => {console.log('點擊了我');})
  • 子組件
    Column() {Text(this.message)Blank()}

1.基礎組件

基礎組件用于展示頁面的基礎元素,有文本Text、按鈕Button、圖片Image。
在這里插入圖片描述

2.布局容器組件

布局容器組件用于組織組件的排列,有行Row、列Column、列表List、網格列表Grid、輪播圖swiper。
在這里插入圖片描述
在這里插入圖片描述

3.導航組件

導航組件實現頁面的跳轉和切換,有Navigation、Tabs。
在這里插入圖片描述

4.自定義組件

通過多種組件的組合,封裝為可復用的UI單元。自定義組件基于struct實現,struct + 自定義組件名 + {…}的組合構成自定義組件,不能有繼承關系。對于struct的實例化,可以省略new。

@Entry
@Component
struct CustomCompent {build() {Column() {Text('Hello,ArkUI!')Blank().height(100)Text('Hello wold!')}.justifyContent(FlexAlign.Center).width('100%')}
}

5.組件生命周期

  • 組件即將出現:aboutToAppear(),在創建自定義組件的新實例后調用。
    可以對狀態變量進行修改,修改后再build函數中生效。
  • 組件構建:buld()
  • 組件構建完成:onDidBuild()
  • 頁面即將出現:onPageShow()
    頁面每次顯示時,都會回調這個函數,比如跳轉到這個頁面,從后臺進入前臺返回這個頁面。僅在@Entry修飾的組件中適用。
  • 點擊按鈕或者側滑返回時:onBackPress()。僅在@Entry修飾的組件中適用。
  • 頁面即將隱藏進入后臺時:onPageHide()。僅在@Entry修飾的組件中適用。
  • 組件銷毀之前調用:aboutToDisappear()。

在這里插入圖片描述


四、狀態管理

狀態變更引起了UI渲染。在聲明式UI編程框架中,UI是程序狀態的運行結果,用戶構建了一個UI模型,其中應用的運行時狀態作為參數。當參數改變時,UI作為返回結果,也將進行對應的改變。這些運行時的狀態變化導致的UI重新渲染,在ArkUI中統稱為狀態管理機制。

在這里插入圖片描述

ArkUI有多維度的狀態管理機制,在UI開發框架中與UI相關聯的數據可以在組件內使用,也可以在不同組件層級間傳遞,比如組件內(@State)、父子組件之間(@Prop/@Link)、爺孫組件之間(@Provide/@Consume)、應用全局范圍內專遞或跨設備傳遞。

從數據的傳遞形式看,可分為只讀的單向傳遞(@Prop)和可變更的雙向傳遞(@Link)。

1.@State裝飾器: 狀態變量

@State裝飾的變量稱為狀態變量,使普通變量具備狀態屬性。當狀態變量改變時,會觸發其直接綁定的UI組件渲染更新。

2.@Prop裝飾器:父子單向同步

對父組件狀態變量值的修改,將同步給子組件@Prop裝飾的變量,子組件@Prop裝飾的變量的修改不會同步到父組件的狀態變量上。

3.@Link裝飾器:父子雙向同步

雙向同步。父組件狀態變量與子組件@Link建立雙向同步,當其中一方改變時,另一方也會同步更新。

4.@Provide/@Consume裝飾器:跨層級傳遞

@Provide和@Consume,應用于與后代組件的雙向數據同步、狀態數據在多個層級之間傳遞的場景。不同于上文提到的父子組件之間通過命名參數機制傳遞,@Provide和@Consume擺脫參數傳遞機制的束縛,實現跨層級傳遞。

5.@Observed/@ObjectLink裝飾器:嵌套類對象屬性變化

@ObjectLink和@Observed類裝飾器用于在涉及嵌套對象或數組的場景中進行雙向數據同步。


五、路由/導航

組件導航(Navigation)和頁面路由(@ohos.router)均提供了應用內的頁面跳轉能力。
在這里插入圖片描述

1.組件導航

在組件導航(Navigation)框架下,“頁面”通過NavDestination組件承載,特指一個NavDestination組件包含的內容。
Navigation是路由導航的根視圖容器,一般作為頁面(@Entry)的根容器,包括單欄(Stack)、分欄(Split)和自適應(Auto)三種顯示模式。Navigation組件適用于模塊內和跨模塊的路由切換,通過組件級路由能力實現更加自然流暢的轉場體驗,并提供多種標題欄樣式來呈現更好的標題和內容聯動效果。一次開發,多端部署場景下,Navigation組件能夠自動適配窗口顯示大小,在窗口較大的場景下自動切換分欄展示效果。

Navigation組件主要包含?導航頁和子頁。導航頁由標題欄(包含菜單欄)、內容區和工具欄組成,可以通過hideNavBar屬性進行隱藏,導航頁不存在路由棧中,與子頁,以及子頁之間可以通過路由操作進行切換。

在這里插入圖片描述


// push page
this.pathStack.pushPath({ name: 'pageOne' });// pop page
this.pathStack.pop();
this.pathStack.popToIndex(1);
this.pathStack.popToName('pageOne');// replace page
this.pathStack.replacePath({ name: 'pageOne' });// clear all page
this.pathStack.clear();

2.Router頁面路由

Router路由的頁面是一個@Entry修飾的Component,每一個頁面都需要在main_page.json中聲明。
頁面路由指在應用程序中實現不同頁面之間的跳轉和數據傳遞。Router模塊通過不同的url地址,可以方便地進行頁面路由,輕松地訪問不同的頁面。

// push page
router.pushUrl({ url:"pages/pageOne", params: null });// pop page
this.getUIContext().getRouter().back({ url: "pages/pageOne" });// replace page
router.replaceUrl({ url: "pages/pageOne" });

參考

  • 文檔——學習ArkUI
  • 視頻——ArkUI框架介紹-嗶哩嗶哩

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

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

相關文章

劇本殺小程序系統開發:構建劇本殺社交新生態

在社交需求日益多樣化的今天,劇本殺憑借其獨特的社交屬性,成為了人們熱衷的社交娛樂方式之一。而劇本殺小程序系統開發,則進一步拓展了劇本殺的社交邊界,構建起一個全新的劇本殺社交新生態,讓玩家在推理與角色扮演中&a…

AI提高投放效率的核心策略

內容概要人工智能技術正深刻改變著廣告投放領域,其核心價值在于顯著提升投放效率。通過融合智能算法優化、實時數據分析與自動化投放流程,AI系統能夠以前所未有的速度和精度處理海量信息,驅動更精準的營銷決策。這不僅大幅縮短了傳統人工操作…

OpenBMC 中命令模式的深度解析:從原理到實現

引言 在 OpenBMC 的設計中,命令模式(Command Pattern)被廣泛應用于各種場景,特別是 IPMI 命令處理、異步操作封裝和用戶請求管理等。本文將深入分析 OpenBMC 中命令模式的實現原理、架構設計以及完整的執行流程,并通過…

從0開始跟小甲魚C語言視頻使用linux一步步學習C語言(持續更新)8.15

第十七天 第五十七,五十八,五十九和六十集 第五十六集 刪除鏈表結點 沒什么好說的關鍵部分代碼如圖 鏈表的插入操作 依舊沒有啥可以說的代碼部分大家看視頻就能看懂,大家應該是沒有什么問題的吧? 第五十七集 共用體形式結構與結構…

云服務器網站無法訪問的系統化故障排查指南及多維度解決方案

當云服務器上的網站突然無法訪問時,這種突發狀況往往讓人措手不及。別擔心,我們可以通過系統化的排查流程快速定位問題根源。以下是經過實戰驗證的故障排除指南,幫您分步解決網站訪問異常問題。一、基礎狀態確認 服務器的生命體征就像人體的脈…

strings命令和findstr命令驗證iso文件中ntkrnlmp.exe系統版本

strings命令和findstr命令驗證iso文件中ntkrnlmp.exe系統版本D:\chsads3647\i386>expand.exe Microsoft (R) File Expansion Utility Version 5.2.3647.0 版本所有 (c) Microsoft Corporation. 保留所有權利。未指定文件。D:\chsads3647\i386>strings.exe ntkrnlmp.exe …

C語言:指針(5)

1. sizeof與strlen的對比1.1 sizeofsizeof屬于是操作符,用于計算變量所占的空間大小,單位為字節。如果操作數是類型的話,計算的是使用類型創建的變量所占內存空間的大小。sizeof只計算數據在內存中所占的空間大小,而不在乎內存中存…

rent8 安裝部署教程之 Windows

1. Apache 安裝與配置 1.1. 獲取并解壓 Apache 在 Apache Lounge 網址下載編譯版的 Apache。下載完成后,將壓縮包解壓到 d:\web\Apache24 作為 Apache 的安裝目錄。 1.2. 配置 Apache 打開配置文件 conf\httpd.conf,找到第 37 行配置。 ? Define SRVROO…

邊緣智能實戰手冊:攻克IoT應用三大挑戰的AI戰術

前言:在當前的AIoT(人工智能物聯網)賽道上,將AI能力下沉至邊緣設備已不再是“要不要做”的選擇題,而是“如何做好”的必答題。然而,在實際項目中,工程師們常常會遇到性能、功耗和隱私這“三座大…

【React】use-immer vs 原生 Hook:誰更勝一籌?

1.概述 use-immer 不屬于官方 Hook,是社區維護的第三方庫!use-immer 通過封裝 Immer 的不可變更新機制,為 React 開發者提供了一種更直觀、高效的狀態管理方式。它尤其適合處理復雜嵌套狀態或需要頻繁更新的場景,同時保持了與 Re…

【案例】Vue3 實現高性能級橫向循環滾動生產線效果:基于 requestAnimationFrame 的流暢動畫方案

動畫效果在工業監控系統、生產看板等場景中,經常需要模擬生產線的動態運行效果。本文將基于 Vue3 和 requestAnimationFrame 實現一個高性能的橫向循環滾動效果,完美模擬生產線傳輸帶的視覺體驗。我們將從代碼實現到原理分析,全面講解如何打造…

萬字長文解碼如何玩轉Prompt(附實踐應用)

在AI技術迅猛發展的今天,如何與大型語言模型高效“對話”已成為釋放其潛力的關鍵。本文深入探討了提示詞工程(Prompt Engineering)這一新興領域,系統解析了從基礎概念到高級技巧的完整知識體系,并結合“淘寶XX業務數科…

easyExcel嵌套子集合導出Excel

我想要的Excel效果說明: 1.創建兩個自定義注解:ExcelMerge(表示主對象內的單個屬性,后續會根據子集合的大小合并下面的單元格),ExcelNestedList(表示嵌套的子集合) 2.NestedDataConverter.java 會把查詢到的數據轉換為一行一行的,相當于主表 left join 子表 ON 主.id子.主id的形…

基于 C# WinForm 字體編輯器開發記錄:從基礎到進階

目錄 基礎版本實現 進階版本改進 字體設置窗體增強 主窗體改進 功能對比 項目在本文章的綁定資源中免費的,0積分就可以下載哦~ 在 Windows Forms 應用開發中,字體編輯功能是許多文本處理軟件的基礎功能。本文將分享一個簡易字體編輯器的開發過程&a…

Linux基本使用和Java程序部署(含 JDK 與 MySQL)

文章目錄Linux 背景知識Linux 基本使用Linux 常用的特殊符號和操作符Linux 常用命令文本處理與分析系統管理與操作用戶與權限管理文件/目錄操作與內容處理工具Linux系統防火墻Shell 腳本與實踐搭建 Java 部署環境apt(Debian/Ubuntu 系的包管理利器)介紹安…

抗輻照CANFD通信芯片在高安全領域國產化替代的研究

摘要:隨著現代科技的飛速發展,高安全領域如航空航天、衛星通信等對電子設備的可靠性與抗輻照性能提出了極高的要求。CANFD通信芯片作為數據傳輸的關鍵組件,其性能優劣直接關系到整個系統的穩定性與安全性。本文聚焦于抗輻照CANFD通信芯片在高…

Mybatis 源碼解讀-SqlSession 會話源碼和Executor SQL操作執行器源碼

作者源碼閱讀筆記主要采用金山云文檔記錄的,所有的交互圖和代碼閱讀筆記都是記錄在云文檔里面,本平臺的文檔編輯實在不方便,會導致我梳理的交互圖和文檔失去原來的格式,所以整理在文檔里面,供大家閱讀交流. 【金山文檔…

Java集合類綜合練習題

代碼 import java.util.*; class ScoreRecord {private String studentId;private String name;private String subject;private int score;public ScoreRecord(String studentId, String name, String subject, int score) {this.studentId studentId;this.name name;this.s…

秒懂邊緣云|1分鐘了解邊緣安全加速 ESA

普通開發者如何搭建安全快速的在線業務才能性價比最高 ?阿里云現已為開發者推出免費版邊緣安全加速 ESA,1 個產品就能把 CDN 緩存 API 加速 DNS WAF DDoS 防護全部搞定,還支持邊緣函數快速部署網站和 AI 應用,性價比拉滿。 1…

數據結構:串、數組與廣義表

📌目錄🔤 一,串的定義🌰 二,案例引入場景1:文本編輯器中的查找替換場景2:用戶手機號驗證📚 三,串的類型定義、存儲結構及其運算(一)串的抽象類型定…