@ComponentV2装饰器:自定义组件

2024-11-10 11:44:16
13次阅读
0个评论

@ComponentV2装饰器:自定义组件

为了在自定义组件中使用V2版本状态变量装饰器的能力,开发者可以使用@ComponentV2装饰器装饰自定义组件。

@ComponentV2装饰器用于装饰自定义组件:

  • 在@ComponentV2装饰的自定义组件中,开发者仅可以使用全新的状态变量装饰器,包括@Local、@Param、@Once、@Event、@Provider、@Consumer等。

  • @ComponentV2装饰的自定义组件暂不支持组件复用、LocalStorage等现有自定义组件的能力。

  • 无法同时使用@ComponentV2与@Component装饰同一个struct结构。

  • @ComponentV2支持一个可选的boolean类型参数freezeWhenInactive,来实现组件冻结功能

  • 一个简单的@ComponentV2装饰的自定义组件应具有以下部分:

    @ComponentV2 // 装饰器
    struct Index { // struct声明的数据结构
      build() { // build定义的UI
      }
    }
    

状态管理V1与V2的混用规则

因为从实际角度出发,V1的开发者已经有很大的基础,让开发者一次性迁移成V2也不符合实际,因此在V1的代码中使用V2的部分能力是允许的,但在设计上,V1和V2的代码是完全隔离的,因为V1能实现的功能,V2能做的更好。记下来通过对V1、V2之间的混用场景进行较为完善的阐述,旨在指引开发者将V1代码向V2代码迁移。

状态管理V1与V2的混用规则可以概括为:

  • V1的自定义组件中不可以使用V2的装饰器,否则编译报错。
  • 组件间不存在变量传递时,V1的自定义组件中可以使用V2的自定义组件,包括import第三方@ComponentV2装饰的自定义组件。
  • 组件间存在变量传递时,V1的变量传递给V2的自定义组件,有如下限制:
    • V1中未被装饰器装饰的变量(后称普通变量):V2只能使用@Param接收。
    • V1中被装饰器装饰的变量(后称状态变量):V2存在只能通过@Param装饰器接收,且仅限于boolean、number、enum、string、undefined、null这些简单类型数据。
  • V2的自定义组件中不可以使用V1的装饰器,否则编译报错。
  • 组件间不存在变量传递时,V2自定义组件可以使用V1的自定义组件,包括import第三方@Component装饰的自定义组件。
  • 组件间存在变量传递时,V2的变量传递给V1的自定义组件,有如下限制:
    • V2中未被装饰器装饰的变量(后称普通变量):若V1使用装饰器装饰接收的数据,只能通过@State、@Prop、@Provide。
    • V2中被装饰器装饰的变量(后称状态变量):若V1使用装饰器装饰接收的数据,不支持内置类型数据:Array、Set、Map、Date。

知道了混用规则,大家就比较方便了,可以按需混用。

状态管理装饰器总览

状态管理V1的装饰器

装饰器类别 装饰器
组件内装饰器 @State、@Prop、@Link、@ObjectLink、@Provide、@Consume、@StorageProp、@StorageLink、@LocalStorageProp、@LocalStorageLink、@Watch
类相关装饰器 @Observed、@Track

状态管理V2的装饰器

装饰器类别 装饰器
组件内装饰器 @Local、@Param、@Provider、@Consumer、@Once、@Event、@Monitor、@Computed
类相关装饰器 @ObservedV2、@Trace、@Type

状态管理装饰器支持的数据类型总览

状态管理能够支持的数据类型有:

数据类型 关键字
简单类型数据 boolean、number、enum、string、null、undefined
function类型 function(仅V2的@Event、@Monitor、@Computed支持)
Object类型 Object
Class类型 Class
内置类型 Array、Map、Set、Date

备注

作者:夏天

链接:https://www.nutpi.net/

出处:https://www.arkui.club/

来源:坚果派

著作权归作者所有,禁止任何未经授权的个人或组织以任何形式将本案例集及其附属资料、创新、创意、架构设计、算法、衍生作品等用于任何商业目的、盈利活动、各类竞赛(比赛)、直播教学、录播教学、线下课程、书籍编写、教材编写、会议、培训、公益活动、项目课题、毕业设计、毕业论文、学术论文等。商业转载请联系作者获得授权,非商业转载请注明出处。否则追究相关责任。

收藏00

登录 后评论。没有帐号? 注册 一个。