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

【高心星出品】

文章目錄

      • V2裝飾器@once的使用
        • 概念
          • 一、核心作用與規則
          • 二、適用場景
        • 案例

V2裝飾器@once的使用

概念

在鴻蒙ArkTS開發中,@Once裝飾器用于實現子組件僅接受父組件傳遞的初始值,后續父組件數據變化不再同步至子組件。以下是其核心要點:

一、核心作用與規則
  1. 初始化同步一次
    @Once@Param結合使用,子組件僅在初始化時接收父組件傳遞的值,后續父組件數據更新時不會觸發同步。
  2. 強制依賴關系
    • @Once必須與@Param搭配使用,單獨使用或與其他裝飾器(如@Local)結合會編譯失敗。
    • 裝飾順序不影響功能,@Param @Once@Once @Param均有效。
  3. 本地修改支持
    結合@Once后,子組件可以修改@Param變量值并觸發UI刷新,此時行為類似@Local,但仍保留初始值傳遞能力。
二、適用場景
  • 固定初始值:父組件傳遞配置參數(如主題色、默認尺寸),子組件僅需初始化時使用。
  • 獨立維護狀態:子組件基于父組件初始值構建自身狀態后,不再依賴外部更新。
案例

父組件(oncepage):
點擊按鈕時,@Local修飾的count自增,并通過child3({ count: this.count })傳遞最新值給子組件。但子組件僅在首次渲染時接收初始值(如10),后續父組件的count變化不會更新子組件。

子組件(child3):
點擊按鈕時,子組件內部count自增并更新UI,但父組件的count始終保持獨立狀態(例如父組件count為15時,子組件可能顯示為12)。

在這里插入圖片描述

@ComponentV2
struct child3 {// 強制父組件傳參 并且只會初始化一次@Require @Once @Param count:numberbuild() {Column() {Button('child count: ' + this.count).width('60%').onClick(() => {//@once裝飾的變量 這里可以更新count值this.count+=1})}.width('100%').padding(20)}
}@Entry
@ComponentV2
struct oncepage {@Local count: number = 10;build() {Column({ space: 20 }) {Button('page count: ' + this.count).width('60%').onClick(() => {this.count += 1})// child count與 父組件count單向綁定child3({ count: this.count })}.height('100%').width('100%')}
}

父子組件同步的數據為數組的時候,使用@once和@param修改數組中元素不會造成單向同步而是會形成雙向同步效果,例如下面案例,父子組件數據會同時改變。

在這里插入圖片描述

@ComponentV2
struct child4 {// 強制父組件傳參 并且只會初始化一次@Require @Once @Param arr:number[]build() {Column() {Button('child count: ' + this.arr[0]).width('60%').onClick(() => {//@once裝飾的變量 這里可以更新count值this.arr[0]+=1})}.width('100%').padding(20)}
}@Entry
@ComponentV2
struct oncepage1 {@Local arr: number[] = [1,2,3];build() {Column({ space: 20 }) {Button('page count: ' + this.arr[0]).width('60%').onClick(() => {this.arr[0] += 1})// child count與 父組件count單向綁定child4({ arr: this.arr })// 使用深度拷貝 就會造成隔離不會雙向同步// child4({arr:[...this.arr]})}.height('100%').width('100%')}
}
裝飾器組合同步方式內存關系適用場景
@Param雙向同步共享引用需要實時聯動的組件(如協同編輯器)
@Once @Param單次初始化同步共享引用*基于初始值的獨立運作組件
@Param + 深拷貝完全隔離獨立內存需要數據隔離的安全場景

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

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

相關文章

跨域請求:解決方案

一、跨域核心概念:同源策略與跨域定義 跨域問題的根源是瀏覽器的 同源策略(Same-Origin Policy),這是瀏覽器為保護用戶數據安全而設置的核心安全限制。 1. 什么是 “同源”? “同源” 指的是兩個 URL 的 協議、域名…

前端形態與樣式風格:從古典到現代的視覺語言演進

目錄前端形態與樣式風格:從古典到現代的視覺語言演進概述1. 前端形態的演進:四種核心范式1.1 古典范式:語義化HTML與CSS1.2 組件化范式:模塊化與復用1.3 響應式范式:多端適配1.4 動態范式:狀態驅動視圖2. 樣…

用戶系統從0到1:登錄、權限、積分一網打盡

👤 用戶系統從0到1:登錄、權限、積分一網打盡 副標題:Flask-Login 多級權限 積分會員系統實戰 項目原型:https://madechango.com 難度等級:???☆☆ 預計閱讀時間:20分鐘 🎯 引子&#xff1…

Java 大視界 -- Java 大數據在智能安防視頻監控系統中的視頻內容理解與智能預警升級

Java 大視界 -- Java 大數據在智能安防視頻監控系統中的視頻內容理解與智能預警升級引言:正文:一、傳統安防監控的 “三重困局”:看不全、看不懂、反應慢1.1 人工盯屏 “力不從心”1.1.1 攝像頭密度與人力的矛盾1.1.2 錄像調閱 “馬后炮”1.2…

OpenHarmony包管理子系統核心源碼深度解讀:從BundleManager到AMS,徹底打通應用安裝、卸載與沙箱機制全鏈路

目錄 架構概覽 核心組件詳解 包安裝流程分析 包卸載流程分析 包更新流程分析 包信息存儲機制 Launcher界面管控 開機默認系統應用安裝機制<

簡單聊聊神經網絡中的反向傳播

參考文章&#xff1a; 一文弄懂神經網絡中的反向傳播法——BackPropagation - Charlotte77 - 博客園 反向傳播求偏導原理簡單理解_反向傳播偏導-CSDN博客 這篇文章是筆者在讀完上述兩篇參考文章后的整理或者說按照自己的理解進行的一些補充&#xff0c;強烈推薦先閱讀上述兩篇文…

JSP自駕游管理系統46u2v--(程序+源碼+數據庫+調試部署+開發環境)

本系統&#xff08;程序源碼數據庫調試部署開發環境&#xff09;帶論文文檔1萬字以上&#xff0c;文末可獲取&#xff0c;系統界面在最后面。系統程序文件列表開題報告內容一、研究背景與意義 近年來&#xff0c;自駕游因自由度高、個性化強成為國內旅游市場增長最快的領域&…

通過 SQL 快速使用 OceanBase 向量檢索學習筆記

背景 AI時代離不開向量數據庫&#xff0c;向量數據庫簡單說就是在數據庫中用多維向量存儲某類事物的特征&#xff0c;通過公式計算各個向量在空間坐標系中的位置關系&#xff0c;以此來判斷事物之間的相似性。相關基礎概念如下: ● Embedding ● 距離/相似性度量 ○ Cosine dis…

PromptAD:首次引入提示學習,實現精準工業異常檢測,1張正常樣本即可超越現有方法

近年來&#xff0c;工業異常檢測&#xff08;Anomaly Detection&#xff09;在智能制造、質量監控等領域扮演著越來越重要的角色。傳統方法通常依賴大量正常樣本進行訓練&#xff0c;而在實際生產中&#xff0c;異常樣本稀少甚至不存在&#xff0c;能否僅憑少量正常樣本就實現精…

算法 --- 字符串

字符串 字符串算法題目主要處理文本的查找、匹配、比較、變換和統計問題&#xff0c;其核心特點是輸入數據為字符序列&#xff0c;解題關鍵在于利用其連續性、前綴性、字典序等特性&#xff0c;并常借助哈希、自動機、指針滑動、動態規劃等技巧高效處理。 詳細分類型與適用場景…

SpringBoot中 Gzip 壓縮的兩種開啟方式:GeoJSON 瘦身實戰

目錄 前言 一、GZIP壓縮知識簡介 1、什么是Gzip 2、Gzip特點 3、Gzip在GIS方面的應用 二、SpringBoot中開啟Gzip的方式 1、在SpringBoot中開啟Gzip的知識簡介 2、SpringBoot中GeoJSON的實例 三、全局開啟Gzip實現 1、實現原理 2、實現效果 四、局部約定配置 1、實現…

PPTist+cpolar:開源演示文稿的遠程創作方案

文章目錄前言【視頻教程】1. 本地安裝PPTist2. PPTist 使用介紹3. 安裝Cpolar內網穿透4. 配置公網地址6. 配置固定公網地址前言 PPTist作為開源在線演示文稿工具&#xff0c;提供媲美PowerPoint的核心功能&#xff0c;支持多頁面編輯、圖表插入、音視頻嵌入和動畫效果設置。特…

服務注冊/服務發現-Eureka

目的&#xff1a;解決微服務在調用遠程服務時URL寫死的問題注冊中心服務提供者&#xff08;Server&#xff09;&#xff1a;一次業務中&#xff0c;被其他微服務調用的服務&#xff0c;也就是提供接口給其他微服務。服務消費者&#xff08;Client&#xff09;:一次業務中&#…

cuda stream

基本概念 cuda stream表示GPU的一個操作隊列&#xff0c;操作在隊列中按照一定的順序執行&#xff0c;也可以向流中添加一定的操作如核函數的啟動、內存的復制、事件的啟動和結束等 一個流中的不同操作有著嚴格的順序&#xff0c;但是不同流之間沒有任何限制 cuda stream中排隊…

數據結構:完全二叉樹

完全二叉樹 定義&#xff1a; 按層序遍歷&#xff08;從上到下&#xff0c;從左到右&#xff09;填充節點。 除了最后一層外&#xff0c;其余各層必須全滿。 最后一層的節點必須 連續靠左。 完全二叉樹不一定是滿二叉樹。 滿二叉樹 (Full Binary Tree)&#xff1a;每個節點都有…

【Java初學基礎】?Object()頂級父類與它的重要方法equals()

object類常見方法/*** native 方法&#xff0c;用于返回當前運行時對象的 Class 對象&#xff0c;使用了 final 關鍵字修飾&#xff0c;故不允許子類重寫。*/ public final native Class<?> getClass() /*** native 方法&#xff0c;用于返回對象的哈希碼&#xff0c;主…

用深度學習(LSTM)實現時間序列預測:從數據到閉環預測全解析

用深度學習&#xff08;LSTM&#xff09;實現時間序列預測&#xff1a;從數據到閉環預測全解析 時間序列預測是工業、金融、環境等領域的核心需求——小到預測設備溫度波動&#xff0c;大到預測股價走勢&#xff0c;都需要從歷史數據中挖掘時序規律。長短期記憶網絡&#xff08…

gpu-z功能介紹,安裝與使用方法

GPU-Z 功能介紹、安裝與使用方法 一、核心功能 硬件信息檢測 識別顯卡型號、制造商、核心架構&#xff08;如NVIDIA Ada Lovelace、AMD RDNA 3&#xff09;、制造工藝&#xff08;如5nm、7nm&#xff09;。顯示顯存類型&#xff08;GDDR6X、HBM2e&#xff09;、容量、帶寬及顯…

數據搬家后如何處理舊 iPhone

每年&#xff0c;蘋果都會推出新款 iPhone&#xff0c;激發了人們升級到 iPhone 17、iPhone 17 Pro、iPhone 17 Pro Max 或 iPhone Air 等新機型的熱情。但在獲得新 iPhone 之前&#xff0c;有一件重要的事情要做&#xff1a;將數據從舊 iPhone 轉移到新設備。雖然許多用戶都能…

Java關鍵字深度解析(上)

這是一份全面的Java關鍵字實戰指南 目錄 1.數據類型關鍵字:內存布局與性能優化 1.1 基礎類型的內存密碼 byte-內存的極簡主義者 int-Java世界的萬能鑰匙 long - 時間與ID的守護者 1.2 引用類型的架構設計 String-不是關鍵字但勝于關鍵字 2.訪問修飾符:企業級權限控制 …