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

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

目录

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

2 -> 变量的双向绑定

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


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

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

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

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

2 -> 变量的双向绑定

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

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

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

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

  • 本地初始化:
@State counter: Counter = new Counter()
  • 在构造组件时通过构造参数初始化:
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的强类型规则。


感谢各位大佬支持!!!

互三啦!!!


http://www.kler.cn/a/464154.html

相关文章:

  • PCA降维算法详细推导
  • 探索 AIGC 的基础知识:人工智能生成内容的全景视图
  • RabbitMQ基础篇之Java客户端快速入门
  • MySQL初始安装登录:ERROR 2003 (HY000): Can‘t connect to MySQL server on
  • 【Java设计模式-1】单例模式,Java世界的“独苗”
  • [极客大挑战 2019]Http 1
  • 使用爬虫技术获取网页中的半结构化数据
  • 算法-判断一个数是不是3的次幂
  • 解决cookie跳转页面失效等问题
  • 大屏深色系 UI 设计:点亮科技与艺术的融合之光
  • 微记录-Linux字符设备的write函数如何避免文件系统重复调用?
  • 级联配准learning
  • 详解广义表长度与深度计算方法
  • 【初识vue以及简单指令】
  • 本地调试自定义Maven Plugin步骤
  • 力学笃行(示例1)QGraphicsView显示相机图像
  • Java对象创建过程与类加载机制
  • 科技查新测试基础知识分享
  • REMARK-LLM:用于生成大型语言模型的稳健且高效的水印框架
  • 【无重复字符的最长子串】
  • C语言中的强弱符号
  • QT----------QT Data Visualzation
  • idea( 2022.3.2)打包报错总结
  • 电子病历四级视角下SQL语句的优化策略与实践用例研究
  • nmap探测网络基础服务
  • 探索Composable Architecture:小众但高效的现代框架技术