harmonyOS组件拥有的状态汇总

harmonyOS组件拥有的状态

@State装饰器:组件内状态

当状态变量被改变时,查询依赖该状态变量的组件;

执行依赖该状态变量的组件的更新方法,组件更新渲染;

和该状态变量不相关的组件或者UI描述不会发生重新渲染,从而实现页面渲染的按需更新。

说明

  • @State装饰的变量必须初始化,否则编译期会报错。

  • @State不支持装饰Function类型的变量,框架会抛出运行时错误。

  • 使用a.b(this.object)形式调用,不会触发UI刷新,通过'let balloon1 = this.balloon;'传入Balloon.increaseVolume(balloon1);

网址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-state-V5

@Prop装饰器:父子单向同步

@Prop装饰的变量可以和父组件建立单向的同步关系。@Prop装饰的变量是可变的,但是变化不会同步回其父组件。

@Prop变量允许在本地修改,但修改后的变化不会同步回父组件。

说明

  • @Prop装饰变量时会进行深拷贝,在拷贝的过程中除了基本类型、Map、Set、Date、Array外,都会丢失类型。例如PixelMap等通过NAPI提供的复杂类型,由于有部分实现在Native侧,因此无法在ArkTS侧通过深拷贝获得完整的数据。

  • @Prop装饰器不能在@Entry装饰的自定义组件中使用。

  • @Prop本地初始化不和父组件同步

  • @Prop嵌套场景:在嵌套场景下,每一层都要用@Observed装饰,且每一层都要被@Prop接收,这样才能观察到嵌套场景。

  • Prop支持联合类型实例

  • 使用a.b(this.object)形式调用,不会触发UI刷新,通过'let score1 = this.score;'传入参数score1,Score.changeScore1(score1);

网址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-prop-V5

@Link装饰器:父子双向同步

子组件中被@Link装饰的变量与其父组件中对应的数据源建立双向数据绑定。

@Link装饰的变量与其父组件中的数据源共享相同的值。

说明

  • @Link装饰器不能在@Entry装饰的自定义组件中使用。

  • @Link装饰的变量禁止本地初始化,否则编译期会报错。

  • @Link装饰的变量仅能被状态变量初始化,不能用常量初始化,编译期会有warn告警,运行时会抛出is not callable运行时错误。

  • @Link不支持装饰Function类型的变量,框架会抛出运行时错误。

  • @Link结合使用@Watch可以在双向同步时,更改本地变量。

  • 使用a.b(this.object)形式调用,不会触发UI刷新,需要通过赋值添加 Proxy 代理实现。

网址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-link-V5

@Provide装饰器和@Consume装饰器:与后代组件双向同步

@Provide装饰器和@Consume装饰器:与后代组件双向同步

@Provide装饰的状态变量自动对其所有后代组件可用,即该变量被"provide"给他的后代组件。由此可见,@Provide的方便之处在于,开发者不需要多次在组件之间传递变量。

后代通过使用@Consume去获取@Provide提供的变量,建立在@Provide和@Consume之间的双向数据同步,与@State/@Link不同的是,前者可以在多层级的父子组件之间传递。

@Provide和@Consume可以通过相同的变量名或者相同的变量别名绑定,建议类型相同,否则会发生类型隐式转换,从而导致应用行为异常。

说明

  • @Provider/@Consumer的参数key必须为string类型,否则编译期会报错。

  • 在初始化@Consume变量时,如果开发者没有定义对应key的@Provide变量,框架会抛出运行时错误,提示开发者初始化@Consume变量失败,原因是无法找到其对应key的@Provide变量。

  • @Provide与@Consume不支持装饰Function类型的变量,框架会抛出运行时错误。

  • @Provide支持allowOverride参数

  • 使用a.b(this.object)形式调用,不会触发UI刷新,需要通过赋值添加 Proxy 代理实现。

网址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-provide-and-consume-V5

@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

@ObjectLink和@Observed类装饰器用于在涉及嵌套对象或数组的场景中进行双向数据同步:

使用new创建被@Observed装饰的类,可以被观察到属性的变化;

子组件中@ObjectLink装饰器装饰的状态变量用于接收@Observed装饰的类的实例,和父组件中对应的状态变量建立双向数据绑定。这个实例可以是数组中的被@Observed装饰的项,或者是class object中的属性,这个属性同样也需要被@Observed装饰。

说明

  • 允许@ObjectLink装饰的数据属性赋值,不允许@ObjectLink装饰的数据自身赋值

  • 被@Observed装饰的类,其成员变量的赋值的变化是可以被观察到的,但对于Child,没有被@Observed装饰,其属性的修改不能被观察到。嵌套的情况

  • @ObjectLink:@ObjectLink只能接收被@Observed装饰class的实例

  • 使用@Observed装饰class会改变class原始的原型链,@Observed和其他类装饰器装饰同一个class可能会带来问题。

  • @ObjectLink装饰器不能在@Entry装饰的自定义组件中使用。

  • @ObjectLink装饰的变量类型需要为显式的被@Observed装饰的类,如果未指定类型,或其不是@Observed装饰的class,编译期会报错。

  • @ObjectLink装饰的变量不能本地初始化,仅能通过构造参数从父组件传入初始值,否则编译期会报错。

  • @ObjectLink装饰的变量是只读的,不能被赋值,但是可以更改@ObjectLink装饰变量的成员属性

  • 使用a.b(this.object)形式调用,不会触发UI刷新,需要通过赋值添加 Proxy 代理实现。

网址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-observed-and-objectlink-V5

相关推荐
亚历克斯神1 小时前
Flutter for OpenHarmony: Flutter 三方库 mutex 为鸿蒙异步任务提供可靠的临界资源互斥锁(并发安全基石)
android·数据库·安全·flutter·华为·harmonyos
钛态1 小时前
Flutter 三方库 smartstruct 鸿蒙化字段映射适配指南:介入静态预编译引擎扫除视图及数据模型双向强转类型错乱隐患,筑稳如磐石的企业级模型治理防线-适配鸿蒙 HarmonyOS ohos
flutter·华为·harmonyos
键盘鼓手苏苏1 小时前
Flutter 组件 csv2json 适配鸿蒙 HarmonyOS 实战:高性能异构数据转换,构建 CSV 流式解析与全栈式数据映射架构
flutter·harmonyos·鸿蒙·openharmony
雷帝木木1 小时前
Flutter 三方库 hrk_logging 的鸿蒙化适配指南 - 实现标准化分层日志记录、支持多目的地输出与日志分级过滤
flutter·harmonyos·鸿蒙·openharmony·hrk_logging
左手厨刀右手茼蒿1 小时前
Flutter 三方库 dio_compatibility_layer 的鸿蒙化适配指南 - 实现 Dio 跨主版本的平滑迁移、支持遗留拦截器兼容与网络请求架构稳定升级
flutter·harmonyos·鸿蒙·openharmony·dio_compatibility_layer
摘星编程1 小时前
开源力量:GitCode+昇腾NPU 部署Mistral-7B-Instruct-v0.2模型的技术探索与经验总结
华为·开源·huggingface·gitcode·昇腾
雷帝木木1 小时前
Flutter 三方库 hashids2 基于鸿蒙安全内核的深度隐匿映射适配:数字指纹泄露防御层、生成短小精悍唯一不可逆加盐哈希,护航全链路请求 URL 隐私-适配鸿蒙 HarmonyOS ohos
安全·flutter·harmonyos
HwJack203 小时前
HarmonyOS响应式布局与窗口监听:让界面像呼吸般灵动的艺术
ubuntu·华为·harmonyos
王码码20354 小时前
Flutter 组件 inappwebview_cookie_manager 适配 鸿蒙Harmony 实战 - 驾驭核心大 Web 容器缓存隧道、构建金融级政企应用绝对防串号跨域大隔离基座
flutter·harmonyos·鸿蒙·openharmony·inappwebview_cookie_manager
左手厨刀右手茼蒿4 小时前
Flutter 组件 ews 的适配 鸿蒙Harmony 实战 - 驾驭企业级 Exchange Web Services 协议、实现鸿蒙端政企办公同步与高安通讯隔离方案
flutter·harmonyos·鸿蒙·openharmony