精选列表

搜索[HarmonyOS NEXT],共6757篇文章
优秀的个人博客,低调大师

HarmonyOS 5.0应用开发——V2装饰器@once的使用

【高心星出品】 V2装饰器@once的使用 概念 在鸿蒙ArkTS开发中,@Once装饰器用于实现子组件仅接受父组件传递的初始值,后续父组件数据变化不再同步至子组件。以下是其核心要点: 一、核心作用与规则 初始化同步一次 @Once与@Param结合使用,子组件仅在初始化时接收父组件传递的值,后续父组件数据更新时不会触发同步。 强制依赖关系 @Once必须与@Param搭配使用,单独使用或与其他装饰器(如@Local)结合会编译失败。 装饰顺序不影响功能,@Param @Once或@Once @Param均有效。 本地修改支持 结合@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:number build() { 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 + 深拷贝 | 完全隔离 | 独立内存 | 需要数据隔离的安全场景 |

资源下载

更多资源
Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。