鴻蒙開發——1.ArkTS聲明式開發(UI范式基本語法)

鴻蒙開發——1、ArkTS聲明式開發:UI范式基本語法

    • @[TOC](鴻蒙開發——1、ArkTS聲明式開發:UI范式基本語法)
    • 一、ArkTS的基本組成
      • (1)核心概念(像貼標簽一樣控制組件)
      • (2)基礎工具包(現成的積木塊)
      • (3)高效開發技巧(進階工具箱)
      • (4)常見誤區提醒及類比理解
    • 二、聲明式UI描述( 給組件"搭積木"的入門指南)
      • (1)🧱創建組件(像拼樂高一樣簡單)
      • (2)🎨配置屬性(給組件穿衣服)
      • (3)🕹?配置事件(給按鈕裝開關)
      • (4)🎁 配置子組件(俄羅斯套娃)
      • (5)💡避坑指南
    • 三、🧩自定義組件的通俗指南
      • (1)什么是自定義組件?
      • (2)為什么需要自定義組件?
      • (3)快速入門案例
      • (4)🛠? 組件建造說明書
        • 組件結構三要素
        • 裝飾器的作用
        • 構建規則(易錯點)
      • (5)🎨 樣式與交互技巧
        • 鏈式調用設置樣式
        • 組件樣式繼承的坑
      • (6)?? 常見問題急救包
      • (7)🌰 實戰案例:計數器組件
      • 🚀 進階技巧

一、ArkTS的基本組成

ArkTS的基本組成

(1)核心概念(像貼標簽一樣控制組件)

  • 裝飾器(給代碼貼魔法標簽)
    ? @Component:相當于給代碼塊貼個“可復用組件”標簽。比如你寫了個按鈕樣式,貼上這個標簽后,整個程序都能重復使用這個按鈕。

    ? @Entry:相當于“主入口”標簽,告訴系統:“這個組件是App啟動時第一個顯示的界面”。

    ? @State:相當于“自動刷新”標簽。比如你在購物車數字上貼了這個標簽,當數量變化時,界面會自動更新顯示最新數值。

  • UI描述(像寫菜譜一樣寫界面)
    用簡單直白的代碼描述界面結構,比如:

    build() {Column() { // 豎著排列Text("你好!").fontSize(20) // 文字Button("點擊我").onClick(() => { 操作代碼 }) // 按鈕}
    }
    

    就像寫菜譜說“先放文字,再放按鈕”一樣直觀。


(2)基礎工具包(現成的積木塊)

  • 系統組件(開箱即用的積木)
    ? 基礎積木:文字(Text)、圖片(Image)、按鈕(Button)

    ? 排列工具:

    Column(豎排:像疊漢堡)  Row(橫排:像排隊)  Stack(疊放:像貼紙一樣層層疊加)RelativeContainer(相對布局:支持容器內部的子元素設置相對位置關系,適用于處理界面復雜的場景,對多個子元素進行對齊和排列。子元素可以指定兄弟元素或父容器作為錨點,基于錨點進行相對位置布局。)
    
  • 屬性鏈式調用(像串珠子一樣設置樣式)
    連續設置多個屬性:

    Text("標題").fontSize(24)       // 字號24.fontColor("#FF0000") // 紅色.margin({top:10})   // 上方留10像素空白
    

    就像給文字戴項鏈,一顆接一顆地加裝飾。

  • 事件綁定(給按鈕裝開關)
    給組件添加交互功能:

    Button("提交").onClick(() => { 提交數據 }) // 點擊事件.onLongPress(() => { 彈出菜單 }) // 長按事件
    

    相當于給按鈕裝了兩個觸發器:短按和長按分別觸發不同操作。


(3)高效開發技巧(進階工具箱)

  • @Builder(打造自己的積木模具)
    把常用的界面片段打包成模板:

    @Builder
    function RedButton(text:string) {Button(text).backgroundColor("#FF0000")
    }
    // 使用時直接調用
    RedButton("危險操作")
    

    相當于做了一個紅色按鈕的模具,隨用隨取。

  • @Styles/@Extend(批量改裝修飾)
    ? 統一風格:給所有標題設置統一樣式,類似于CSS中的類樣式

    @Styles function titleStyle() {.fontSize(20).fontColor("#333")
    }
    Text("標題1").titleStyle()
    

    ? 擴展組件:給系統按鈕添加圓角

    @Extend(Button)
    function roundButton() {.borderRadius(8)
    }
    
  • 狀態樣式(智能變裝術)
    根據組件狀態自動切換樣式:

    Button("登錄").stateStyles({normal: { backgroundColor: "#EEE" }, // 默認灰色pressed: { backgroundColor: "#CCC" } // 按下變深灰})
    

    就像按鈕被按下時會“變色回應”你的操作。


(4)常見誤區提醒及類比理解

  1. 裝飾器順序:@Entry必須放在最外層,像信封的收件人地址要寫在最上面
  2. 狀態管理:只有被@State標記的變量變化才會觸發界面刷新,普通變量修改不會更新顯示
  3. 鏈式調用:屬性設置順序有時會影響效果(比如先設寬度再設邊距可能導致布局錯位)

類比理解:
開發界面就像裝修房子:

  • 裝飾器是各種功能標簽(如“承重墻”“可拆卸隔斷”)
  • 系統組件是現成的家具(桌子、椅子)
  • @Builder是自己設計的定制家具圖紙
  • 狀態樣式是智能家居系統(天黑自動開燈)

二、聲明式UI描述( 給組件"搭積木"的入門指南)

(1)🧱創建組件(像拼樂高一樣簡單)

兩種組裝方式:

  1. 無參數組件(空手組裝)

    Divider() // 直接寫組件名加空括號,就像拼一根直線
    

    適合不需要額外參數的組件,比如分割線、空白間隔

  2. 有參數組件(帶說明書組裝)

    // 圖片必須帶地址參數
    Image('https://example.com/cat.jpg') // 相當于給圖片框塞照片// 文字可以不帶內容(顯示空文本)
    Text() // 相當于一個隱形的文字占位符
    

參數小技巧:

  • 可以插入變量或算式:
    Image(this.userAvatar) // 使用變量里的圖片地址
    Text(`剩余次數:${5 - this.count}`) // 顯示動態計算結果
    

(2)🎨配置屬性(給組件穿衣服)

連續點選設置法

Text('你好世界').fontSize(20)          // 文字大小.fontColor('#FF0000')  // 文字顏色.margin({top:10})      // 上方留10像素空白

就像給洋娃娃穿衣服:先穿裙子,再戴帽子,最后穿鞋子

顏色/樣式快捷選項

Text('特別提示').fontColor(Color.Red)     // 使用預定義紅色.fontWeight(FontWeight.Bold) // 直接選"加粗"模式

(3)🕹?配置事件(給按鈕裝開關)

箭頭函數用法

Button('點我抽獎').onClick(() => {this.luckyNumber = Math.random() // 點擊后生成隨機數})

相當于給按鈕裝了個"按下就執行"的魔法開關,箭頭函數內部的this是詞法作用域,由上下文確定。匿名函數可能會有this指向不明確問題,在ArkTS中不允許使用。

錯誤用法提醒

// ? 不要用普通函數
Button('錯誤示例').onClick(function() {// 這里的this會指向錯誤的地方!})// ? 正確用箭頭函數
Button('正確示例').onClick(() => {// 箭頭函數自動綁定正確上下文})

(4)🎁 配置子組件(俄羅斯套娃)

容器組件用法

Column() { // 創建一個垂直排列的容器Text('標題').fontSize(24)      // 第一個子組件Divider()                    // 中間加分割線Image('logo.png').width(100) // 最后放圖片
}

像往抽屜里放東西:先放書本,再放文具,最后放零食

多層嵌套示例

Column() {Row() { // 橫向排列容器Image('頭像.jpg').width(50)Text('張三').fontSize(16)}Grid() { // 網格布局Image('產品1.jpg')Image('產品2.jpg')Image('產品3.jpg')}
}

(5)💡避坑指南

  • 組件創建不用new

    // ? 正確
    Text('你好')
    // ? 錯誤
    new Text('你好')
    
  • 樣式設置順序不影響(大部分情況)

    // 這兩種寫法效果相同
    Text().fontSize(20).color('red')
    Text().color('red').fontSize(20)
    
  • 容器組件必須包含內容

    // ? 正確用法
    Column() {Text('內容')
    }
    // ? 空容器會報錯
    Column()
    

類比理解
開發界面就像玩裝修游戲:

  • 組件是各種家具(按鈕=臺燈,圖片=掛畫)
  • 屬性是家具的皮膚(顏色/尺寸/位置)
  • 事件是家具的互動功能(點擊臺燈會亮)
  • 容器是房間布局(書架=垂直排列,電視柜=水平排列)

三、🧩自定義組件的通俗指南

(1)什么是自定義組件?

就像搭樂高積木,系統組件是現成的積木塊,而自定義組件是開發者自己設計的特殊積木。它能組合多個積木、重復使用,還能根據數據變化自動更新外觀。

(2)為什么需要自定義組件?

  1. 代碼復用:像寫好的菜譜,重復使用不重寫代碼
  2. 邏輯分離:把界面和數據處理分開,像把食材和烹飪步驟分開
  3. 維護方便:改一個地方,所有用到的地方自動更新

(3)快速入門案例

// 定義一個會變色的問候組件
@Component 
struct HelloComponent {@State message: string = 'Hello!'; // 會變的數據build() {Row() {Text(this.message).onClick(() => {this.message = '你戳我干嘛~'; // 點擊后文字變化})}}
}// 在頁面中使用
@Entry
@Component
struct MainPage {build() {Column() {HelloComponent()  // 使用自定義組件HelloComponent({ message: '你好呀!' }) // 傳入不同參數}}
}

(4)🛠? 組件建造說明書

組件結構三要素
@Component                // 🏷? 組件身份證
struct MyComponent {       // 🏗? 組件骨架build() { /* UI描述 */ } // 🎨 繪制方法
}
裝飾器的作用
裝飾器作用示例
@State數據變化自動刷新界面@State count = 0
@Entry標記為頁面入口@Entry struct HomePage
@Reusable組件可復用優化性能@Reusable struct Item
構建規則(易錯點)
  • 根節點要求

    @Entry 
    @Component
    struct MyPage {build() {// ? 正確:容器組件作為根節點Column() { Text('Hello') }// ? 錯誤:ForEach不能當根節點// ForEach([1,2,3], ...)}
    }
    
  • 禁止操作

    build() {// ? 不能聲明變量// let num = 1// ? 不能直接改狀態// this.count++// ? 正確方式:通過事件修改Button('+1').onClick(() => this.count++)
    }
    

(5)🎨 樣式與交互技巧

鏈式調用設置樣式
Text('藝術字').fontSize(24)          // 字號.fontColor('#FF69B4')  // 粉色.margin({top:20})      // 上邊距
組件樣式繼承的坑
// 子組件
@Component
struct MyButton {build() { Button('按鈕') }
}// 父組件使用時
MyButton().backgroundColor('red') // ? 這個紅色會加在"隱形容器"上

(實際效果:按鈕外圍會有紅色背景,而不是按鈕本身)


(6)?? 常見問題急救包

  • 為什么點擊沒反應?

    • 檢查是否漏寫@State裝飾器
    • 確認事件綁定用了箭頭函數:.onClick(() => {})
  • 組件顯示空白?

    • 檢查build()是否有根節點
    • 確認導出了組件:export struct MyComponent
  • 樣式不生效?

    • 嘗試用!important強制樣式:.width(100).width!('80%')

(7)🌰 實戰案例:計數器組件

@Component
export struct MyCounter {@State num: number = 0build() {Row() {Button('-').onClick(() => this.num--)Text(`${this.num}`).margin(10)Button('+').onClick(() => this.num++)}}
}
@Entry
@Component
struct Index {build() {RelativeContainer() {Column() {Text('商品數量:')MyCounter()  // 復用計數器MyCounter({ num: 5 }) // 初始值5}}.height('100%').width('100%')}
}

Tip:這個組件可以用于購物車、投票等需要增減操作的場景


在這里插入圖片描述

🚀 進階技巧

  1. 組件凍結(API11+):

    @Component({ freezeWhenInactive: true }) // 離開屏幕時凍結組件
    struct LazyComponent {}
    
  2. 跨頁面傳參

    @Entry({ routeName: 'detail', storage: myStorage })
    @Component
    struct DetailPage {}
    

學習路線建議:從簡單組件開始 → 掌握狀態管理 → 嘗試復雜布局 → 優化組件性能

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

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

相關文章

【SPIN】PROMELA語言編程入門基礎語法(SPIN學習系列--1)

PROMELA(Protocol Meta Language)是一種用于描述和驗證并發系統的形式化建模語言,主要與SPIN(Simple Promela Interpreter)模型檢查器配合使用。本教程將基于JSPIN(SPIN的Java圖形化版本)&#…

Automatic Recovery of the Atmospheric Light in Hazy Images論文閱讀

Automatic Recovery of the Atmospheric Light in Hazy Images 1. 論文的研究目標與實際意義1.1 研究目標1.2 實際問題與產業意義2. 論文的創新方法、模型與公式2.1 方法框架2.1.1 方向估計(Orientation Estimation)2.1.2 幅值估計(Magnitude Estimation)2.2 與傳統方法的對…

基于微信小程序的在線聊天功能實現:WebSocket通信實戰

基于微信小程序的在線聊天功能實現:WebSocket通信實戰 摘要 本文將詳細介紹如何使用微信小程序結合WebSocket協議開發一個實時在線聊天功能。通過完整的代碼示例和分步解析,涵蓋界面布局、WebSocket連接管理、消息交互邏輯及服務端實現,適合…

速通:國際數字影像產業園園區服務體系

速通:國際數字影像產業園園區服務體系 國際數字影像產業園服務體系致力于構建全周期、多維度、高效率的產業賦能平臺,旨在優化營商環境,激發企業活力,推動數字影像產業集群化、高端化發展。 一、基礎運營與智慧管理服務 智慧化…

DeerFlow:字節新一代 DeepSearch 框架

項目地址:https://github.com/bytedance/deer-flow/ 【全新的 Multi-Agent 架構設計】獨家設計的 Research Team 機制,支持多輪對話、多輪決策和多輪任務執行。與 LangChain 原版 Supervisor 相比,顯著減少 Tokens 消耗和 API 調用次數&#…

MySQL 大表中添加索引的兩種常見方式及其優缺點分析

引言 在數據庫性能優化過程中,給大表添加索引是一項常見且重要的操作。由于大表數據量龐大,索引的創建過程往往涉及較高的系統開銷和復雜的操作流程。本文將介紹兩種在大表中添加索引的常見方法:直接添加索引和表復制方式,分別分…

Ubuntu系統掛載磁盤并配置開機自動掛載

今天買了個服務器然后掛載了一個500G的磁盤,但是登錄進去后發看不到,就是下面這樣的 只能看到100G的系統盤 rootecm-74de:/usr/local# df -h Filesystem Size Used Avail Use% Mounted on tmpfs 3.1G 1.1M 3.1G 1% /run /dev/vda2 …

Android開發-Application

在Android應用開發中,Application類扮演著非常重要的角色。它作為整個應用程序的全局單例實例存在,在應用啟動時最先被創建,并且在整個應用生命周期內持續存在。通過自定義Application類,開發者可以執行全局初始化操作、管理全局狀…

邊緣計算平臺

本文來源 : 騰訊元寶 邊緣計算平臺是一種在靠近數據源頭的網絡邊緣側部署的分布式計算架構,通過融合網絡、計算、存儲和應用核心能力,就近提供實時、低延遲的智能服務。以下是其核心要點: ??1. 定義與特點?? ??定義??&a…

Spring 框架 JDBC 模板技術詳解

一、JDBC 模板技術概述 在傳統 JDBC 開發中,開發人員需要手動處理數據庫連接(Connection)、事務管理、語句執行(Statement)和結果集(ResultSet)等繁瑣操作,不僅代碼冗余度高&#x…

Axure難點解決分享:統計分析頁面引入Echarts示例動態效果

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝! Axure產品經理精品視頻課已登錄CSDN可點擊學習https://edu.csdn.net/course/detail/40420 課程主題:統計分析頁面引入Echarts示例動態效果 主要內容:echart示例引入、大小調整、數據導入 應用場景:統計分析頁面…

SpringBoot 數據校驗與表單處理:從入門到精通(萬字長文)

一、SpringBoot 數據驗證基礎 1.1 數據驗證的重要性 在現代Web應用開發中,數據驗證是保證系統安全性和數據完整性的第一道防線。沒有經過驗證的用戶輸入可能導致各種安全問題,如SQL注入、XSS攻擊,或者簡單的業務邏輯錯誤。 數據驗證的主要…

Ubuntu 22.04(WSL2)使用 Docker 安裝 Zipkin 和 Skywalking

Ubuntu 22.04(WSL2)使用 Docker 安裝 Zipkin 和 Skywalking 分布式追蹤工具在現代微服務架構中至關重要,它們幫助開發者監控請求在多個服務之間的流動,識別性能瓶頸和潛在錯誤。本文將指導您在 Ubuntu 22.04(WSL2 環境…

python打卡day25@浙大疏錦行

知識點回顧: 1.異常處理機制 2.debug過程中的各類報錯 3.try-except機制 4.try-except-else-finally機制 在即將進入深度學習專題學習前,我們最后差缺補漏,把一些常見且重要的知識點給他們補上,加深對代碼和流程的理解。 作業&a…

鴻蒙OSUniApp 開發實時聊天頁面的最佳實踐與實現#三方框架 #Uniapp

使用 UniApp 開發實時聊天頁面的最佳實踐與實現 在移動應用開發領域,實時聊天功能已經成為許多應用不可或缺的組成部分。本文將深入探討如何使用 UniApp 框架開發一個功能完善的實時聊天頁面,從布局設計到核心邏輯實現,帶領大家一步步打造專…

43、Server.UrlEncode、HttpUtility.UrlDecode的區別?

Server.UrlEncode 和 HttpUtility.UrlDecode 是 .NET 中用于處理 URL 編碼/解碼的兩個不同方法,主要區別在于所屬命名空間、使用場景和具體行為。以下是詳細對比: 1. 所屬類庫與命名空間 Server.UrlEncode 屬于 System.Web.HttpServerUtility 類。通常…

代碼隨想錄 算法訓練 Day1:數組

題目一: 給定一個 n 個元素有序的(升序)整型數組 nums 和一個目標值 target ,寫一個函數搜索 nums 中的 target,如果目標值存在返回下標,否則返回 -1。 示例 1: 輸入: nums [-1,0,3,5,9,12], target …

容器技術 20 年:顛覆、重構與重塑軟件世界的力量

目錄 容器技術發展史 虛擬化技術向容器技術轉變 Docker的橫空出世 容器編排技術與Kubernetes 微服務的出現與Istio 工業標準的容器運行時 容器技術與 DevOps 的深度融合? 無服務架構推波助瀾 展望未來發展方向 從 20 世紀硬件虛擬化的笨重,到操作系統虛擬…

集成釘釘消息推送功能

1. 概述 本文檔詳細描述了在若依框架基礎上集成釘釘消息推送功能的開發步驟。該功能允許系統向指定釘釘用戶發送文本和富文本消息通知。 2. 環境準備 2.1 釘釘開發者賬號配置 登錄釘釘開發者平臺:https://open.dingtalk.com/創建/選擇企業內部應用獲取以下關鍵信…

【行為型之訪問者模式】游戲開發實戰——Unity靈活數據操作與跨系統交互的架構秘訣

文章目錄 🧳 訪問者模式(Visitor Pattern)深度解析一、模式本質與核心價值二、經典UML結構三、Unity實戰代碼(游戲物品系統)1. 定義元素與訪問者接口2. 實現具體元素類3. 實現具體訪問者4. 對象結構管理5. 客戶端使用 …