HarmonyOS--ArkTS(1)--基本語法(1)

目錄

基本語法概述

聲明式UI描述

自定義組件

創建自定義組件

自定義組件的結構--struct ,@Component,build()函數

生命周期


基本語法概述

  • 裝飾器: 用于裝飾類、結構、方法以及變量,并賦予其特殊的含義。如上述示例中@Entry、@Component和@State都是裝飾器,@Component表示自定義組件,@Entry表示該自定義組件為入口組件,@State表示組件中的狀態變量,狀態變量變化會觸發UI刷新。
  • UI描述:以聲明式的方式來描述UI的結構,例如build()方法中的代碼塊。
  • 自定義組件:可復用的UI單元,可組合其他組件,如上述被@Component裝飾的struct Hello。
  • 系統組件:ArkUI框架中默認內置的基礎和容器組件,可直接被開發者調用,比如示例中的Column、Text、Divider、Button。
  • 屬性方法:組件可以通過鏈式調用配置多項屬性,如fontSize()、width()、height()、backgroundColor()等。
  • 事件方法:組件可以通過鏈式調用設置多個事件的響應邏輯,如跟隨在Button后面的onClick()。
  • 系統組件、屬性方法、事件方法具體使用可參考基于ArkTS的聲明式開發范式。

除此之外,ArkTS擴展了多種語法范式來使開發更加便捷:

  • @Builder/@BuilderParam:特殊的封裝UI描述的方法,細粒度的封裝和復用UI描述。
  • @Extend/@Style:擴展內置組件和封裝屬性樣式,更靈活地組合內置組件。
  • stateStyles:多態樣式,可以依據組件的內部狀態的不同,設置不同樣式。

聲明式UI描述

ArkTS以聲明方式 組合 和 擴展 組件 來 描述應用程序的UI,同時還提供了基本的屬性事件子組件配置方法,幫助開發者實現應用交互邏輯。

//如果組件支持子組件配置,則需在尾隨閉包"{...}"中為組件添加子組件的UI描述。Column、Row、Stack、Grid、List等組件都是容器組件。@State size:number = 10
myClickHandler(){}build(){Column() {Row() {Image('https://xyz/test.jpg')Image('test1.jpg').width(100).height(100)// string類型的參數Text('test')//枚舉類型.fontSize(20).fontColor(Color.Red).fontWeight(FontWeight.Bold)// $r形式引入應用資源,可應用于多語言場景Text($r('app.string.title_value')).fontSize(this.size)// 無參數形式Text()Button('click +1')//事件方法以“.”鏈式調用的方式配置系統組件支持的事件//三種方式.onClick(() => {this.myText = 'ArkUI';}).onClick(function(){this.myText = 'ArkUI';}.bind(this)).onClick(this.myClickHandler.bind(this))}
}
}

自定義組件

創建自定義組件

自定義組件具有以下特點:

  • 可組合:允許開發者組合使用系統組件、及其屬性和方法。
  • 可重用:自定義組件可以被其他組件重用,并作為不同的實例在不同的父組件或容器中使用。
  • 數據驅動UI更新:通過狀態變量的改變,來驅動UI的刷新
自定義組件的結構--struct ,@Component,build()函數
@Component
struct MyComponent {build() {}
}
@Entry
@Component
struct MyComponent {
}

?提示1: @Entry裝飾的自定義組件將作為UI頁面的入口?

?提示2:@Entry裝飾的自定義組件,其build()函數下的根節點唯一且必要,且必須為容器組件,其中ForEach禁止作為根節點。

@Component裝飾的自定義組件,其build()函數下的根節點唯一且必要,可以為非容器組件,其中ForEach禁止作為根節點。

//自定義組件?


//@Component裝飾的自定義組件,其build()函數下的根節點唯一且必要,可以為非容器組件,其中ForEach禁止作為根節點。@Component
struct HelloComponent {@State message: string = 'Hello, World!';build() {// HelloComponent自定義組件組合--系統組件Row和Text//(當前根節點Row)Row() {Text(this.message).onClick(() => {// 狀態變量message的改變驅動UI刷新,UI從'Hello, World!'刷新為'Hello, ArkUI!'this.message = 'Hello, ArkUI!';})}}
}

?//多次調用自定義組件?

//@Entry裝飾的自定義組件,其build()函數下的根節點唯一且必要,且必須為容器組件,其中ForEach禁止作為根節點。
@Entry
@Component
struct ParentComponent {build() {//(當前根節點Column)Column() {Text('ArkUI message')//多次調用自定義組件HelloComponent({ message: 'Hello, World!' });Divider()HelloComponent({ message: '你好!' });}}
}

生命周期

頁面生命周期,即被@Entry裝飾的組件生命周期,提供以下生命周期接口:

  • onPageShow:頁面每次顯示時觸發一次,包括路由過程、應用進入前臺等場景,僅@Entry裝飾的自定義組件生效。
  • onPageHide:頁面每次隱藏時觸發一次,包括路由過程、應用進入前后臺等場景,僅@Entry裝飾的自定義組件生效。
  • onBackPress:當用戶點擊返回按鈕時觸發,僅@Entry裝飾的自定義組件生效。

組件生命周期,即一般用@Component裝飾的自定義組件的生命周期,提供以下生命周期接口:

  • aboutToAppear:組件即將出現時回調該接口,具體時機為在創建自定義組件的新實例后,在執行其build()函數之前執行。
  • aboutToDisappear:在自定義組件析構銷毀之前執行。不允許在aboutToDisappear函數中改變狀態變量,特別是@Link變量的修改可能會導致應用程序行為不穩定。

生命周期流程如下圖所示,下圖展示的是被@Entry裝飾的組件(首頁)生命周期。

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

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

相關文章

VSCode安裝與使用

VS Code 安裝及使用 1、下載 進入VS Code官網:地址,點擊 DownLoad for Windows下載windows版本 注: Stable:穩定版Insiders:內測版 2、安裝 雙擊安裝包,選擇我同意此協議,再點擊下一步 選擇你…

SQL Server查詢計劃(Query Plan)——SQL處理過程

6. 查詢計劃(Query Plan) 6.1. SQL處理過程 就SQL語句的處理過程而言,各關系庫間大同小異,尤其是商業庫之間實現機制和細節差別更小些,其功能及性能支持方面也更加強大和完善。SQL Server作為商業庫中的后起之秀,作為SQL語句處理過程的主要支撐和保障,其優化器及相關機…

【Vulnhub 靶場】【hacksudo: ProximaCentauri】【簡單 - 中等】【20210608】

1、環境介紹 靶場介紹:https://www.vulnhub.com/entry/hacksudo-proximacentauri,709/ 靶場下載:https://download.vulnhub.com/hacksudo/hacksudo-ProximaCentauri.zip 靶場難度:簡單 - 中等 發布日期:2021年06月08日 文件大小&…

第9節:Vue3 指令

如何在UniApp中使用Vue3的指令&#xff1a; <template> <view> <!-- 使用指令 --> <text v-show"isVisible" click"toggleVisibility">點擊隱藏/顯示</text> <button v-on:click"incrementCount">點擊…

【LeetCode:70. 爬樓梯 | 遞歸 -> 記憶化搜索 -> DP】

&#x1f680; 算法題 &#x1f680; &#x1f332; 算法刷題專欄 | 面試必備算法 | 面試高頻算法 &#x1f340; &#x1f332; 越難的東西,越要努力堅持&#xff0c;因為它具有很高的價值&#xff0c;算法就是這樣? &#x1f332; 作者簡介&#xff1a;碩風和煒&#xff0c;…

【圖片版】計算機組成原理考前復習題【第3章 存儲系統-2(Cache)】

目錄 前言 考前復習題&#xff08;必記&#xff09; 結尾 前言 在計算機組成原理的學習過程中&#xff0c;我們深入探索了計算機系統概述這一重要領域。計算機系統作為現代科技的核心&#xff0c;是整個計算機科學的基石。我們將學到的知識與理論轉化為了能夠解決現實問題…

web api性能測試使用wrk

web api性能測試 這邊簡單的給出shell腳本 注意先安裝&#xff1a;wrk和gnuplot #!/bin/bash# Copyright 2020 Lingfei Kong <colin404foxmail.com>. All rights reserved. # Use of this source code is governed by a MIT style # license that can be found in the…

vue 學習 -- day39(vue3 — reactive 對比 ref)

從定義數據角度對比&#xff1a; ref用來定義&#xff1a;基本類型數據。reactive用來定義&#xff1a;對象&#xff08;或數組&#xff09;類型數據。備注&#xff1a;ref也可以用來定義對象&#xff08;或數組&#xff09;類型數據, 它內部會自動通過reactive轉為代理對象。從…

如何防止惡意調用和攻擊對抖音商品詳情API的影響?

防止惡意調用和攻擊對抖音商品詳情API的影響是開發者和平臺必須關注的問題。惡意調用和攻擊可能導致服務中斷、數據泄露或其他安全問題&#xff0c;對平臺和用戶造成損失。本文將介紹一些常見的惡意調用和攻擊方式&#xff0c;并提出相應的防范措施&#xff0c;以確保抖音商品詳…

JavaScript函數概念、聲明、調用

JavaScript函數是一段可以重復使用的代碼塊&#xff0c;用于執行特定的任務。函數封裝了一定的邏輯&#xff0c;可以接收輸入參數并返回結果&#xff0c;使得代碼更加模塊化&#xff0c;可讀性更高。 函數聲明可以使用function關鍵字來創建&#xff0c;通常包括函數名、參數列…

python畫動漫形象(魔法少女小圓曉美焰,super beautiful)

1.源代碼 import turtle as te import time WriteStep 15 # 貝塞爾函數的取樣次數 Speed 5 Width 600 # 界面寬度 Height 500 # 界面高度 Xh 0 # 記錄前一個貝塞爾函數的手柄 Yh 0 def Bezier(p1, p2, t): # 一階貝塞爾函數 return p1 * (1 - t) p2 * t def Bezier_2(x1…

stu06-VSCode里的常用快捷鍵

Alt Z&#xff1a;文字自動換行。當一行的文字太長時&#xff0c;可以使用。或者查看→自動換行Alt Shift ↓ &#xff1a;快速復制當前行到下一行Alt Shift ↑ &#xff1a;快速復制當前行到上一行Alt B&#xff1a;在默認瀏覽器中打開當前.html文件Ctrl Enter&#xf…

深入學習之anaconda、pytorch、cuda安裝

文章目錄 1. 安裝CUDA與CUDNN2. Anaconda安裝PyTorch3. notebook添加自己創建的環境4. Anaconda安裝相關的庫5. GPU測試 1. 安裝CUDA與CUDNN csdn大佬安裝步驟 【CUDA】cuda安裝 &#xff08;windows版&#xff09; 查看此電腦的CUDA版本配置 自己電腦上GPU使用的詳細參數 n…

端口復用和重映射

一、端口復用 &#xff08;1&#xff09;端口復用概念 端口復用是將一個I/O賦予多個功能&#xff0c;通過設置I/O的工作模式來切換不同的功能。 STM32有很多的內置外設&#xff0c;這些外設的外部引腳都是與GPIO復用的。也就是說&#xff0c;一個GPIO如果可以復用為內置外設的…

《PySpark大數據分析實戰》圖書上線啦

《PySpark大數據分析實戰》圖書上線啦 《PySpark大數據分析實戰》圖書上線啦特殊的日子關于創作關于數據關于Spark關于PySpark關于圖書/專欄 《PySpark大數據分析實戰》圖書上線啦 特殊的日子 不知不覺一轉眼入駐CSDN已經滿一年了&#xff0c;這真是一個充滿意義的特殊的日子&…

Linux命令詳解./configure、make、make install 命令學習

文章來自Linux命令詳解./configure、make、make install 命令-CSDN博客 文章目錄 1 編譯安裝命令詳解 1.1 簡介 1.2 詳細解釋 1.2.1 configure命令 1.2.2 make 1.2.3 make insatll 1.2.4 configure和make中的DESTDIR和PREFIX區別 1.2.4.1 configure中的PREFIX 1.2.4.2 make ins…

sfp8472學習CDR

1,cdr名稱解釋 因為光信號傳輸至一定距離的時候,通常是長距離傳輸,其波形會出現一定程度的失真,接收端接收到的信號是一個個長短不一的脈沖信號,這個時候在接收端,我們就無法得到我們需要的數據。所以,這個時候就需要有信號的再生,信號的再生功能為再放大、再整形和再…

[足式機器人]Part2 Dr. CAN學習筆記-自動控制原理Ch1-2穩定性分析Stability

本文僅供學習使用 本文參考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN學習筆記-自動控制原理Ch1-2穩定性分析Stability 0. 序言1. 穩定的分類2. 穩定的對象3. 穩定的系統4. 系統穩定性的討論5. 補充內容——Transfer Function(傳遞函數) - nonzero Initial Condition(非零初始…

高防IP防御效果怎么樣,和VPN有區別嗎

高防IP主要是用于防御網絡攻擊&#xff0c;可以抵御各種類型的DDoS攻擊&#xff0c;隱藏源IP地址&#xff0c;提高網絡安全性和用戶體驗。主要目的是解決外部網絡攻擊問題&#xff0c;保護網絡安全&#xff0c;避免因攻擊而導致的業務中斷和數據泄露等問題。 而VPN則是一種可以…

ubuntu20 安裝docker

一.官網安裝文檔 &#xff08;基本按官方文檔安裝&#xff09; Install Docker Engine on Ubuntu | Docker Docs 二.安裝步驟 1.docker 需要64位操作系統、linux內核要在3.1以上 #uname -r 2.卸載可能存在的舊版本 #sudo apt-get remove docker docker-engine docker-ce …