【HarmonyOS】ArkUI中this指向的坑

【关键字】

this指向,.bind(this),TS到ArkTS的适配

 

随着HarmonyOS Previewer版本的发布,笔者也是立马鸟枪换炮,想试一试鸿蒙的新特性,新功能。结果刚把老的工程代码导入,工程就无法编译了,让我们来看看是哪里报了错:

cke_9972.png​​

bind方法居然不支持了。要知道在Api9的HarmonyOS开发过程中,我们如果需要用成员函数或者匿名函数给组件配置事件时,是需要用bind方法确保函数体内的this指向正确的组件。那么现在bind方法不支持了我们该如何确保呢?让我们来看一下官方文档:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V2/arkts-declarative-ui-description-0000001630425053-V2#ZH-CN_TOPIC_0000001711186904__%E9%85%8D%E7%BD%AE%E4%BA%8B%E4%BB%B6

 

根据官方文档中的表述,配置事件的方式现在有了以下的变化:

1.使用匿名函数配置事件,不支持用function声明的方式进行配置,现在只支持“()=>{......}”的方式进行声明配置。

2.使用匿名函数和使用成员函数配置,都不再需要用bind方法来绑定this了,现在会自动绑定所属的组件

 

看来官方是为了简化我们的代码,提高代码的可读性,优化了这部分的逻辑。

那么就有人要问,如果我确实需要动态改变函数内的this指向,应该如何实现呢?官方也给了我们解决的方案:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V2/arkts-more-cases-0000001674820386-V2#ZH-CN_TOPIC_0000001711186500__arkts-no-typing-with-this

 

原始代码:

cke_1516.png

1.可以使用类的方法实现

cke_2476.png

2.将this作为参数传入

cke_3691.png

3.将属性作为参数传入

cke_5158.png

那么肯定也还有人会问,我们项目里用到的地方那么多,一个个改多麻烦。官方在兼容性方面也给了我们解答:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V2/arkts-migration-background-0000001722779509-V2

在API version 10之前,ArkTS(.ets文件)完全采用了标准TS的语法。从API version 10 Release起,ArkTS的语法规则基于上述设计考虑进行了明确定义,同时,SDK增加了在编译流程中对.ets文件的ArkTS语法检查,通过编译告警或编译失败提示开发者适配新的ArkTS语法。

根据工程的compatibleSdkVersion,具体策略如下:

  • compatibleSdkVersion >= 10 为标准模式。在该模式下,对.ets文件,违反ArkTS语法规则的代码会导致工程编译失败,需要完全适配ArkTS语法后方可编译成功。
  • compatibleSdkVersion < 10 为兼容模式。在该模式下,对.ets文件,以warning形式提示违反ArkTS语法规则的所有代码。尽管违反ArkTS语法规则的工程在兼容模式下仍可编译成功,但是需要完全适配ArkTS语法后方可在标准模式下编译成功。

cke_6857.png

这样相关的地方就只会告警而不会影响编译,不过为了代码的美观性和可读性,还是建议各位小伙伴适配哦。

posted @ 2024-03-04 16:03  Mayism123  阅读(222)  评论(0编辑  收藏  举报