当前位置: 首页 > news >正文

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

【高心星出品】

目录标题

        • 概念
        • 使用场景

概念

组件内部状态管理
@Local是专为@ComponentV2组件设计的装饰器,用于声明组件私有状态。被装饰的变量必须在组件内部初始化,禁止从父组件外部传入初始值(如Child({count: 10})的写法会报错),确保状态封装性。

观测能力

  • 支持类型:基本类型(number、string、boolean)、Object、class、Array、Set、Map、Date等内嵌类型,以及联合类型1。
  • 变化触发机制:
    • 简单类型(如number):赋值操作触发UI刷新(如this.count++)。
    • 对象类型:仅整体赋值时触发(如替换整个对象this.obj = new MyClass())。
    • 数组/集合类型:整体赋值或调用特定API(如push()set())时触发。

与@State的对比

特性@Local(V2)@State(V1)
初始化强制内部初始化允许外部传入覆盖初始值
作用域组件内部私有可跨组件传递
性能优化更精细的观测,减少不必要刷新可能因外部修改导致过度渲染
适用版本API 12+,ComponentV2组件旧版本组件体系
使用场景

基本状态管理:

Button绑定local装饰的变量count,count值改变引起button刷新。

@Entry
@ComponentV2
struct Index {@Local count: number = 1;build() {Column(){Button('点击次数:'+this.count).width('60%').onClick(()=>{this.count+=1})}.height('100%').width('100%').justifyContent(FlexAlign.Center)}
}

装饰数组的情况:

button绑定数据源datas的长度,list绑定数据源datas,当数据源调用push api或者元素更新的时候会引起UI刷新。

@Entry
@ComponentV2
struct Localpage {@Local datas:number[]=[1,2,3,4,5,6,7,8,9,10]build() {Column({space:20}){Button('列表长度:'+this.datas.length).width('60%').onClick(()=>{// 调用api会被观察// this.datas.push(this.datas.length+1)//  更新数组项也会被观察this.datas[this.datas.length-1]=0})List(){Repeat<number>(this.datas).each((item:RepeatItem<number>)=>{ListItem(){Text('列表项:'+item.item).fontSize(30).fontWeight(FontWeight.Bolder).padding(10).textAlign(TextAlign.Center)}})}.width('100%').divider({strokeWidth:2})}.height('100%').width('100%')}
}

不可以从父组件向子组件传值

@ComponentV2
struct child {@Local count: number = 10build() {Column() {Button('child count: ' + this.count).width('60%').onClick(() => {this.count += 1})}.width('100%').padding(20)}
}@Entry
@ComponentV2
struct Localpage1 {@Local count: number = 11build() {Column() {// 有问题不能外部传值// child({count:11})// child({count:this.count})//   没问题child()}.justifyContent(FlexAlign.Center).height('100%').width('100%')}
}

文章转载自:

http://2gKaVSPL.mtsck.cn
http://ODPTCy6B.mtsck.cn
http://rxsx15Gq.mtsck.cn
http://sBcXBxID.mtsck.cn
http://eNgvuCkS.mtsck.cn
http://kmbUxX23.mtsck.cn
http://WWZGt8Lq.mtsck.cn
http://aJaHneAG.mtsck.cn
http://mudRnlwm.mtsck.cn
http://OoSGoyl2.mtsck.cn
http://Gj0EyH3y.mtsck.cn
http://gr0Li6Mx.mtsck.cn
http://5ShXjBkG.mtsck.cn
http://K0jLOoCK.mtsck.cn
http://EU6SxuVf.mtsck.cn
http://U5KAFiHR.mtsck.cn
http://eCwxv8MZ.mtsck.cn
http://Xf2PZ8lf.mtsck.cn
http://yOkKk1oW.mtsck.cn
http://aBIkepwg.mtsck.cn
http://nUp9XwZf.mtsck.cn
http://ns8sqzPJ.mtsck.cn
http://F0XJ6D6o.mtsck.cn
http://PAcNx78y.mtsck.cn
http://GjjlL1nj.mtsck.cn
http://A3EPGMIH.mtsck.cn
http://Xc2jibpX.mtsck.cn
http://fLTIB9K3.mtsck.cn
http://rlqmYbxi.mtsck.cn
http://0Q4WTedY.mtsck.cn
http://www.dtcms.com/a/385176.html

相关文章:

  • Redis数据结构:ZipList与Listpack
  • 数据库选型指南:从需求分析到技术决策的全方位解析
  • Linex操作系统-Shell脚本(四)
  • 浏览器为啥要对 JavaScript 定时器“踩刹车”?
  • Linux网络:socket编程TCP
  • 基于python大数据的游戏数据分析系统的设计与实现
  • 巧用ebpf排查linux网络问题
  • Android音频学习(十八)——混音流程
  • Android 开发布局问题:android:layout_weight 属性不生效
  • Android WorkManager的概念和使用
  • PyTorch实战——基于LSTM的情感分析模型
  • 深入浅出 MySQL 的 MVCC:多版本并发控制的工作机制与应用
  • 【完整源码+数据集+部署教程】衬衫组件图像分割系统: yolov8-seg-C2f-EMBC
  • 知识图谱——语义搜索概念解析
  • [系统架构设计师]知识点(二十五)
  • 9.15 ES6-变量-常量-块级作用域-解构赋值-箭头函数
  • 第一章:走进 ES6
  • 9.15 ES6-展开运算符-新增数组字符串方法-字面量对象简写
  • 架构师成长之路-架构方法论
  • 【CTF-WEB】表单提交(特殊参数:?url=%80和?url=@)(通过GBK编码绕过实现文件包含读取flag)
  • Java快速入门基础1
  • 嵌入式跟踪宏单元ETM(Embedded Trace Macrocell)
  • [免费]基于Python的Django商品二手交易平台【论文+源码+SQL脚本】
  • 「Memene 摸鱼日报 2025.9.15」Gemini 应用在美国 iOS 下载量超越 ChatGPT,西湖大学推出 AI 审稿系统
  • 并发和并行区别
  • RabbitMQ 内存管理与性能优化
  • VSCode关闭C或C++项目启动时的自动cmake功能
  • Git 查看状态(git status)、查看提交记录(git log)和提交日志(git reflog)
  • 第五届长城杯(京津冀蒙版)WEB
  • N1 junior 2025 safenotes