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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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.访问修饰符:企业级权限控制 …