【高心星出品】

文章目录

      • 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)是大模型时代提升计算效率与模型能力的核心技术之一。其核心思想是将复杂任务分解为多个子任务,通过动态路由机制激活特定专家网络处理输入数据,从而在保持模型容量的同时大幅降低计算成本。以下是技术细节与实际应用的深度解析: 一…