首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【HarmonyOS之旅】ArkTS语法(四) -> 使用限制与扩展

【HarmonyOS之旅】ArkTS语法(四) -> 使用限制与扩展

作者头像
枫叶丹
发布2025-01-03 10:00:11
发布2025-01-03 10:00:11
3300
举报
文章被收录于专栏:C++C++

1 -> 在生成器函数中的使用限制

ArkTS语言的使用在生成器函数中存在一定的限制:

  • 表达式仅允许在字符串(${expression})、if条件、ForEach的参数和组件的参数中使用;
  • 任何表达式都不能导致任何应用程序状态变量(@State、@Link、@Prop)的改变,否则会导致未定义和潜在不稳定的框架行为;
  • 生成器函数内部不能有局部变量。

上述限制都不适用于事件处理函数(例如onClick)的匿名函数实现。

2 -> 变量的双向绑定

ArkTS支持通过$$双向绑定变量,通常应用于状态值频繁改变的变量。

  • 当前$$支持基础类型变量,以及@State、@Link和@Prop装饰的变量。
  • 当前$$仅支持bindPopup属性的show参数和@State变量之间的渲染,Radio组件的checked属性。
  • $$绑定的变量变更时,仅渲染当前组件,提高渲染速度。
代码语言:javascript
复制
@Entry
@Component
struct bindPopup {
  @State customPopup: boolean = false
  build() {
    Column() {
      Button(){
        Text('Popup')
      }
      .onClick(()=>{
        this.customPopup = !this.customPopup
      })
      .bindPopup(
        $$this.customPopup, {
        message: "showPopup"
      }
      )
    }
  }
}

3 -> 自定义组件成员变量初始化的方式与约束

组件的成员变量可以通过两种方式初始化:

  • 本地初始化:
代码语言:javascript
复制
@State counter: Counter = new Counter()
  • 在构造组件时通过构造参数初始化:
代码语言:javascript
复制
MyComponent({counter: $myCounter})

装饰器类型

本地初始化

通过构造函数参数初始化

@State

必须

可选

@Prop

禁止

必须

@Link

禁止

必须

@StorageLink

必须

禁止

@StorageProp

必须

禁止

@Provide

必须

可选

@Consume

禁止

禁止

@ObjectLink

禁止

必须

常规成员变量

推荐

可选

从上表中可以看出:

  • @State变量需要本地初始化,初始化的值可以被构造参数覆盖。
  • @Prop和@Link变量必须且仅通过构造函数参数进行初始化。

通过构造函数方法初始化成员变量,需要遵循如下规则:

从父组件中的变量(下)到子组件中的变量(右)

@State

@Link

@Prop

常规变量

@State

不允许

允许

允许

允许

@Link

不允许

允许

不推荐

允许

@Prop

不允许

不允许

允许

允许

@StorageLink

不允许

允许

不允许

允许

@StorageProp

不允许

不允许

不允许

允许

常规变量

允许

不允许

不允许

允许

从上表中可以看出:

  • 父组件的常规变量可以用于初始化子组件的@State变量,但不能用于初始化@Link或@Prop变量。
  • 父组件的@State变量可以初始化子组件的@Prop、@Link(通过$)或常规变量,但不能初始化子组件的@State变量。
  • 父组件的@Link变量可以初始化子组件的@Link或常规变量。但是初始化子组件的@State成员是语法错误,此外不建议初始化@Prop。
  • 父组件的@Prop变量可以初始化子组件的常规变量或@Prop变量,但不能初始化子组件的@State或@Link变量。
  • @StorageLink和@StorageProp不允许由父组件中传递到子组件。
  • 除了上述规则外,还需要遵循TS的强类型规则。

感谢各位大佬支持!!!

互三啦!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 -> 在生成器函数中的使用限制
  • 2 -> 变量的双向绑定
  • 3 -> 自定义组件成员变量初始化的方式与约束
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档