HarmonyOS鸿蒙Next中声明式开发范式@Extend装饰器的Bug

HarmonyOS鸿蒙Next中声明式开发范式@Extend装饰器的Bug 本来怀着愉快的心情为我的专栏《鸿蒙开发ArkUI最佳实践》写第3章第一节的教程。无意中发现了声明式开发范式@Extend装饰器的一个Bug。具体过程如下:

首先建立一个Hello World页面,代码如下:

@Entry
@Componentstruct Index {
  build() {
    Flex({
      direction: FlexDirection.Column,
      alignItems: ItemAlign.Center,
      justifyContent: FlexAlign.Center
    }) {
      Text('Hello World')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
    }
    .width('100%')
    .height('100%')
  }
}

效果如下:

QQ截图20220517235649.png

@Extend装饰器将新的属性函数添加到内置组件上,如Text、Column、Button等。通过@Extend装饰器可以快速定义并复用组件的自定义样式。

将文本样式使用@Extend装饰器包装一下:

[@Extend](/user/Extend)(Text) function style() {
  .fontSize(50)
  .fontWeight(FontWeight.Bold)
}

然后原来的代码可使用.style()描述文本的样式,如下图所示:

111.png

此时App的效果仍然让人愉快。但是…如果给上述@Extend声明加上多行注释:

/**
 * 通过[@Extend](/user/Extend)装饰器快速定义并复用组件的自定义样式
 */
[@Extend](/user/Extend)(Text) function style() {
  .fontSize(50)
  .fontWeight(FontWeight.Bold)
}

然后,预览器的效果:

QQ截图20220518000743.png

事情还没完,我在多行注释下再加入一个单行注释,居然恢复正常了:

222.png

神奇吗?就是这样神奇。估计@Extend装饰器上面有多行注释时会引发编译异常,希望华为的同学复测一下,看看是否一个Bug。

另外,对于@Extend装饰器,我觉得目前还有些鸡肋。首先,@Extend装饰器包装的内容,只能供本页面内部调用,无法使用export供其它页面复用。但是,如果其它页面定义了一个同名的@Extend装饰器,又会提示重复定义。总之,对它,我有些没有脾气。

17 回复

开发者你好,收到你的反馈,我们会尽快转发相关技术验证,请耐心等待。

更多关于HarmonyOS鸿蒙Next中声明式开发范式@Extend装饰器的Bug的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


同感,@Extend不能export给其他页面使用,只能在当前页面使用这个非常难受,如果每个页面都进行@Extend一下,那就失去了它本身扩展的意义了。

还有在官方文档中@Extend的使用方法中写到@Extend仅支持定义在全局,但与实际只能在当前页面使用相冲突,不知是否是我对于“定义在全局”理解有误,还是@Extend暂时的使用缺陷,望各位大佬答疑解惑

同感,不能export就很奇怪

HarmonyOS的分布式文件系统让我在多设备间共享文件变得更加方便。

另外,对于@Extend装饰器,我觉得目前还有些鸡肋。首先,@Extend装饰器包装的内容,只能供本页面内部调用,无法使用export供其它页面复用。但是,如果其它页面定义了一个同名的@Extend装饰器,又会提示重复定义。总之,对它,我有些没有脾气。

同感,确实很鸡肋。我看他们Codelabs中很多都是这么写的,一个样式每个component中都定义了一边,希望官方等尽可能早的优化这一体验问题,否则@Style@Extend这两个装饰器就真的几乎是装饰而已了。

你没发现吗?论坛关于@Extend@Styles 不能全局使用的反馈,官方开发都不敢回复一个字~,

希望HarmonyOS能加强与其他品牌设备的兼容性,让更多人受益。

楼主您好,接4楼的回复,将多行注释与代码间的空白一行删除掉,也是不存在该问题的。

111.png

楼主您好,经验证,DevEco Studio 3.0.0.803,API7,也是不存在该问题的。

20220530-141317(WeLinkPC).png

您好,将多行注释与代码间的空白一行删除掉,再试试。

楼主您好,这个问题已经反馈给研发,请您耐心等待一下。

姓名:张三
职业:软件工程师
简介:具有五年软件开发经验,熟悉Java、Python和C++。

楼主您好,您用的是哪个版本的DevEco Studio和API呢,我这边用DevEco Studio 3.0.0.800和API7亲测真机和预览器不存在这个问题,您可以将您的DevEco Studio和API升级成最新版本,然后清除缓存试试。

我这边使用的win-64位,DevEco Studio 3.0.0.803,API7,清除缓存后依然有这个问题。

另外,对于@Extend装饰器,我觉得目前还有些鸡肋。首先,@Extend装饰器包装的内容,只能供本页面内部调用,无法使用export供其它页面复用。但是,如果其它页面定义了一个同名的@Extend装饰器,又会提示重复定义。总之,对它,我有些没有脾气。

同感,此外只能在page使用,listitem,tabcontact中呢?

在HarmonyOS鸿蒙Next中,@Extend装饰器用于扩展组件的样式或行为。目前已知的Bug包括在某些情况下,@Extend装饰器可能无法正确应用样式或行为,导致组件显示异常或功能失效。具体表现为:当多个@Extend装饰器同时作用于同一个组件时,可能会出现样式覆盖或冲突,导致最终效果与预期不符。此外,在某些动态更新样式的场景中,@Extend装饰器可能无法及时响应样式变化,导致组件状态不一致。这些问题可能会影响开发者在声明式开发范式下的开发体验和最终应用效果。

在HarmonyOS鸿蒙Next中,@Extend装饰器用于扩展组件的样式或行为。目前已知的Bug包括:

  1. 在某些情况下,@Extend装饰器可能无法正确应用样式,导致组件显示异常;
  2. 当多个@Extend装饰器同时作用于同一组件时,可能会出现样式冲突或覆盖问题;
  3. 在动态更新样式时,@Extend装饰器可能无法及时响应变化。

建议开发者在使用时仔细检查样式应用情况,并及时更新到最新版本以获取修复。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!