HarmonyOS 5.0應用開發——V2裝飾器@param的使用

【高心星出品】

文章目錄

      • V2裝飾器@param的使用
        • 概念
        • 使用方法
        • 案例

V2裝飾器@param的使用

概念

在鴻蒙ArkTS開發中,@Param裝飾器是組件間狀態管理的重要工具,主要用于父子組件間的單向數據傳遞,這一點與V1中的@prop類似。

  • @Param裝飾的變量支持本地初始化,但不允許在組件內部直接修改。
  • 被@Param裝飾的變量能夠在初始化自定義組件時從外部傳入,當數據源也是狀態變量時,數據源的修改會同步給@Param。
  • @Param可以接受任意類型的數據源,包括普通變量、狀態變量、常量、函數返回值等。
  • @Param裝飾的變量變化時,會刷新該變量關聯的組件。
  • @Param支持對基本類型(如number、boolean、string、Object、class)、內嵌類型(如Array、Set、Map、Date),以及null、undefined和聯合類型進行觀測。
  • 對于復雜類型如類對象,@Param會接受數據源的引用。在組件內可以修改類對象中的屬性,該修改會同步到數據源。
  • @Param的觀測能力僅限于被裝飾的變量本身。詳見觀察變化。
使用方法
  1. 數據流向
    單向同步(父組件 → 子組件),僅支持父組件數據源變化觸發子組件更新。
  2. 適用條件 1
    • 僅限@ComponentV2裝飾的組件(API version 12+)。
    • 子組件禁止直接修改@Param裝飾的變量(需通過@Once或事件觸發父組件修改)。
  3. 支持類型
    基本類型(number/boolean/string等)、對象、數組、Date/Map/Set等內嵌類型,以及null/undefined和聯合類型。
@Param變量裝飾器說明
裝飾器參數無。
能否本地修改否。若需要修改值,可使用@Param搭配@Once修改子組件的本地值。或通過@Event裝飾器,修改@Param數據源的值。
同步類型由父到子單向同步。
允許裝飾的變量類型Object、class、string、number、boolean、enum等基本類型以及Array、Date、Map、Set等內嵌類型。支持null、undefined以及聯合類型。
被裝飾變量的初始值允許本地初始化,若不在本地初始化,則需要和@Require裝飾器一起使用,要求必須從外部傳入初始化。
傳遞規則說明
從父組件初始化@Param裝飾的變量允許本地初始化,若無本地初始化則必須從外部傳入初始化。當同時存在本地初始值與外部傳入值時,優先使用外部傳入值進行初始化。
初始化子組件@Param裝飾的變量可以初始化子組件中@Param裝飾的變量。
同步@Param可以和父組件傳入的狀態變量數據源(即@Local或@Param裝飾的變量)進行同步,當數據源發生變化時,會將修改同步給子組件的@Param。
案例

子組件中有一個按鈕展示@param裝飾的count,但是不能更新本地的count,父組件中有一個按鈕展示@local裝飾的count,并且與子組件的count綁定,形成單向通信效果。點擊父組件按鈕會更新父子兩者的組件顯示數據。@require配合@param會強制要求父組件初始化子組件數據。

@ComponentV2
struct child {// 強制父組件傳參@Require @Param count:number// 父組件可以傳參也可以不傳參// @Param count: number = 10build() {Column() {Button('child count: ' + this.count).width('60%').onClick(() => {// 這里會報錯,因為@param裝飾的數據不能自己更新,需要讓父組件更新 同步進來// this.count+=1})}.width('100%').padding(20)}
}@Entry
@ComponentV2
struct Parampage {@Local count: number = 10;build() {Column({ space: 20 }) {Button('page count: ' + this.count).width('60%').onClick(() => {this.count += 1})// child count與 父組件count單向綁定child({ count: this.count })}.height('100%').width('100%')}
}

同步數據為數組的時候,子組件中可以修改數組元素,不能初始化整個數組,這里的修改會形成雙向同步關系,下面案例里面點擊兩個按鈕數據會同時變化。

@ComponentV2
struct child2 {@Require @Param arr:number[]build() {Column() {Button('child count: ' + this.arr[0]).width('60%').onClick(() => {// 不可以修改整個數組,但是可以修改數組元素 形成雙向同步this.arr[0]+=1})}.width('100%').padding(20)}
}@Entry
@ComponentV2
struct Parampage1 {@Local arr:number[]=[1,2,3]build() {Column({ space: 20 }) {Button('page count: ' + this.arr[0]).width('60%').onClick(() => {this.arr[0]+=1})// child arr與 父組件arr單向綁定child2({arr:this.arr })}.height('100%').width('100%')}
}

如果單向同步的數據是復雜的結構info類,在子組件中@param裝飾的數據可以進行修改其屬性并且會同步給父組件形成局部雙向通信,

在下面案例中點擊子組件按鈕的時候in的count值已經發生了修改,父組件中的count也會修改,只不過@param和@local沒有觀察到,當先點擊子組件按鈕再點擊父組件按鈕的時候就會觀察到兩者顯示10–12–14 .

class info{count:numberconstructor(count:number) {this.count=count}
}@ComponentV2
struct child2 {@Require @Param in:info=new info(10)build() {Column() {Button('child count: ' + this.in.count).width('60%').onClick(() => {// param不允許本地修改// this.in=new info(11)// 允許修改對象的屬性 并且會同步到父組件 形成有限制的雙向同步this.in.count+=1})}.width('100%').padding(20)}
}@Entry
@ComponentV2
struct Parampage1 {@Local in:info=new info(10)build() {Column({ space: 20 }) {Button('page count: ' + this.in.count).width('60%').onClick(() => {this.in=new info(this.in.count+1)})// child count與 父組件count單向綁定child2({ in: this.in })}.height('100%').width('100%')}
}

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

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

相關文章

SLAM | 無人機視覺/激光雷達集群SLAM技術進展綜述

主要內容如下: 無人機集群SLAM技術概述:介紹無人機集群SLAM的基本概念、重要性及面臨的挑戰,使用表格對比不同傳感器配置的特點。 多傳感器融合與協同SLAM架構:分析集中式、分布式和混合式協同架構的特點,使用表格對比不同架構的優缺點。 視覺協同SLAM的技術進展:總結直接…

信息化系統運維文檔資料,運維服務方案,運維巡檢方案

1、系統服務內容?1.1 服務目標?1.2 信息資產統計服務?1.3 網絡與安全系統運維服務?1.4 主機與存儲系統運維服務?1.5 數據庫系統運維服務?1.6 中間件運維服務?2、服務管理制度規范?2.1 服務時間管理?2.2 運維人員行為規范?2.3 現場服務支持規范?2.4 問題記錄與歸檔規…

JavaScript——document對象

DOM 是 document object model(文檔對象模型)的縮寫。它是一種與平臺、語言無關的接口,允許程序動態地訪問或更新 HTML、XML 文檔的內容、結構和樣式,且提供了一系列的函數和對象來實現增、刪、改、查操作。DOM 對象的一個特點是&…

UART,IIC,SPI總線(通信協議)

嵌 入 式 軟 件 筆 試 題要求:閉卷考試(不能翻書、不能開電腦);作答時間50分鐘;共10道題目。volatile的作用有哪些volatile: 防止編譯器對代碼進行優化,直接從內存中取最新的值 應用場景&#x…

通信模組性能調優

通信模組性能調優 1 背景 2 高通平臺軟硬加速 2.1 NSS 2.2 SFE 2.3 PPE 3 CPU 負載均衡設置 3.1 啟用內核 RPS&RFS 功能 3.2 網卡隊列修改建議 3.3 調整負載前后的 CPU 使用對比 3.4 網卡中斷均衡 3.4.1 netdev_max_backlog 3.4.2 中斷綁核 3.5 CPU性能模式 3.6 熱管理 3.7…

消息隊列kafka的事務特性

kafka的java客戶端producer也支持事務消息嗎?具體是啥事務呢? 是的,Kafka的Java客戶端Producer確實支持事務消息。讓我詳細解釋Kafka事務的概念和使用方法。 Kafka事務的主要特點: Producer Transactions:確保多個消息…

用Python實現自動化的Web測試(Selenium)

Python作為數據科學和自動化領域的主流語言,在網絡爬蟲開發中占據著重要地位。本文將全面介紹Python爬蟲的技術棧、實現方法和最佳實踐。爬蟲技術概述網絡爬蟲(Web Crawler)是一種按照特定規則自動抓取互聯網信息的程序。它可以自動化地瀏覽網…

「Memene 摸魚日報 2025.9.17」上海張江人工智能創新小鎮正式啟動,華為 DCP 技術獲網絡頂會獎項

theme: condensed-night-purple 以下內容包括「人工智能生成內容」 上海張江人工智能創新小鎮正式啟動,華為 DCP 技術獲網絡頂會獎項 👏在昨天(2025.9.16),AI領域有這些內容可能值得你關注: 上海張江人工智…

Vehiclehal的VehicleService.cpp

VehicleService.cpp 是 Android Automotive OS 中負責車輛相關功能的核心服務組件,主要處理車身信息獲取及狀態設置接口,通過 HIDL(Hardware Interface Definition Language)接口與系統框架層交互。 ?12核心功能VehicleService.c…

《LINUX系統編程》筆記p11

公共資源也稱為共享資源,是指可以被多個并發進程或線程共同訪問(讀取或寫入)的系統資源。臨界資源是公共資源的一個子集。特指那些一次僅允許一個進程或線程訪問的公共資源。如果一個進程正在使用它,其他試圖訪問該資源的進程必須…

spring-kafka消費異常處理

默認的消費異常處理 默認情況下,如果程序沒有顯式做任何的異常處理,spring-kafka會提供一個默認的DefaultErrorHandler, 它會使用FixedBackOff做重試,會不間斷的連續重試最多9次,也就是說一個消息最多會被消費10次。如果重試次數耗…

leecode73 矩陣置零

我的思路 這個題目不難,就是一句話,遍歷這個矩陣的時候,當遇到0的時候就把該行該列改為0,同時為了不影響后續的遍歷,我們可以將這個遍歷和修改分為兩個數組。使用mn的輔助空間 class Solution {public void setZeroe…

Spring Boot 與前端文件上傳跨域問題:Multipart、CORS 與網關配置

前言在前后端分離架構下,文件上傳是一個常見功能。但在 Spring Boot 項目中,我們經常會遇到前端調用接口上傳文件時出現 跨域問題,表現為:瀏覽器控制臺報錯:Access-Control-Allow-Origin 缺失或不匹配。使用 FormData …

快速解決云服務器的數據庫PhpMyAdmin登錄問題

打開PhpMyAdmin數據庫管理器登錄頁面賬號密碼就是你的用戶名(如YiXun)和密碼注意:root賬戶的密碼,點擊下面的“root密碼”即能看到或修改PhpMyAdmin無法打開如果打不開:在數據庫,點擊PHPMyAdmin&#xff0c…

vite+vue3中使用FFmpeg@0.12.15實現視頻編輯功能,不依賴SharedArrayBuffer!!!

FFmpeg0.12.15完全不依賴SharedArrayBuffer!!!強烈推薦使用 本文章主要是在vitevue3項目中使用FFmpeg,只展示了如何在項目中引入和基礎的使用 更多詳細參數可參照 ffmpeg官網https://ffmpeg.org/ 一、安裝FFmpeg 可通過npm直接安裝 npm install ffmpeg/core0.12.10…

構網型5MW中壓儲能變流升壓一體機技術方案

1 構網型儲能背景概述1.1 新型電力系統亟需構網支撐眾所周知,新型電力系統具有兩高特征:高比例新能源大規模并網、高比例電力電子大范圍接入。近年來風光裝機占比越來越高,而傳統火電裝機占比越來越低,并在2023年首次降至50%以下…

SRE 系列(七)| 從技術架構到團隊組織

目錄SRE落地與組織架構實踐技術架構與組織架構的匹配技術架構示例運維職責分工技術保障體系SRE 多角色團隊總結SRE落地與組織架構實踐 在落地 SRE 時,很多團隊最關心的問題之一就是組織架構:我們究竟需要怎樣的團隊形態,才能支撐微服務和分…

香港期權市場的主要參與者有哪些?

本文主要介紹香港期權市場的主要參與者有哪些?香港期權市場作為全球重要的金融衍生品市場,其參與者結構呈現多元化、專業化的特征,主要涵蓋以下核心群體。香港期權市場的主要參與者有哪些?1. 機構投資者(主導力量&…

搜維爾科技:全身可穿戴Teslasuit動捕服的功能,自立式FES裝置

功能性電刺激 (FES) 設備廣泛應用于康復和醫療實踐。其底層技術利用低能量電脈沖,在中風、脊髓損傷、多發性硬化癥、腦癱等各種疾病患者中人工產生身體運動。一般來說,FES系統可以分為三類:開環、有限狀態控制和閉環方法。這三種方法描述了 F…

【深度學習新浪潮】MoE是什么技術?

混合專家模型(Mixture of Experts,MoE)是大模型時代提升計算效率與模型能力的核心技術之一。其核心思想是將復雜任務分解為多個子任務,通過動態路由機制激活特定專家網絡處理輸入數據,從而在保持模型容量的同時大幅降低計算成本。以下是技術細節與實際應用的深度解析: 一…