@Reusable 里面怎么正确使用 @Builder - HarmonyOS 鸿蒙Next
@Reusable 里面怎么正确使用 @Builder - HarmonyOS 鸿蒙Next
[@Reusable](/user/Reusable)
@Component
struct ReusableFlowItem {
@State item: number = 0
@Prop fontSize: number = 12
// 从复用缓存中加入到组件树之前调用,可在此处更新组件的状态变量以展示正确的内容
aboutToReuse(params: Record<string, number>) {
this.item = params.item;
console.info('Reuse item:' + this.item)
}
aboutToAppear() {
console.info('item:' + this.item)
}
[@Builder](/user/Builder)
itemBuild(icon: string, item: number) {
Image($r(icon))
.objectFit(ImageFit.Fill)
.geometryTransition('geometryTransition' + icon )
.sharedTransition('sharedImage' + icon + item, {duration: 300 });
}
build() {
Column() {
// 直接使用 itemBuild 会有复用错乱问题
// this.itemBuild(getIcon(this.item), this.item)
Image($r(getIcon(this.item)))
.objectFit(ImageFit.Fill)
.geometryTransition('geometryTransition' + getIcon(this.item) )
.sharedTransition('sharedImage' + getIcon(this.item) + this.item, {duration: 300 });
Text(getContent(this.item)).fontSize(this.fontSize).maxLines(3).textOverflow({overflow: TextOverflow.Ellipsis})
}
.alignItems(HorizontalAlign.Start)
}
}
如上所述,直接使用 [@Builder](/user/Builder) itemBuild
会导致图片错乱,直接写Image 就正常。 如果我还是想用 [@Builder](/user/Builder) itemBuild
,怎么让复用也正常呢
更多关于@Reusable 里面怎么正确使用 @Builder - HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
自定义构建函数(@Builder)默认的按值参数传递方式不支持动态改变组件,当传递的参数为状态变量时,状态变量的改变不会引起@Builder方法内的UI刷新,要实现UI动态刷新需要按引用传递参数。
https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-arkts-8-V5
有两种解决方法
①按引用传递参数
class Tmp {
icon: string = ''
item: number = 0
}
@Builder
itemBuild($$: Tmp) {
Image($r($$.icon))
.objectFit(ImageFit.Fill)
.geometryTransition('geometryTransition'+$$.icon )
.sharedTransition('sharedImage' + $$.icon + $$.item, {duration: 300 });
}
this.itemBuild({icon: getIcon(this.item), item: this.item})
② 封装成自定义组件
更多关于@Reusable 里面怎么正确使用 @Builder - HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙)开发中,@Reusable
和 @Builder
是两个与内存管理和对象构建相关的注解,但需要注意的是,这两个注解并不是鸿蒙系统特有的,而是通常在一些框架或库中用于简化代码和提高开发效率。在鸿蒙开发环境中,如果你使用的是兼容Java的框架(如某些UI框架或数据处理库),这些注解可能仍然适用。
要在@Reusable
类中正确使用@Builder
,你需要确保以下几点:
-
@Reusable
类:通常用于标记一个可以被重用或缓存的类实例。在鸿蒙中,这更多依赖于具体的内存管理和依赖注入机制。 -
@Builder
注解:用于生成一个构建器类,以链式调用的方式创建对象实例。它简化了复杂对象的初始化过程。 -
结合使用:在
@Reusable
类中,如果你想使用@Builder
,你需要确保该类有一个静态内部构建器类,该构建器类使用了@Builder
注解,并且提供了所有必要的字段设置方法以及一个build()
方法来生成实例。
示例代码框架:
@Reusable
public class MyClass {
private final String field1;
private final int field2;
private MyClass(String field1, int field2) {
this.field1 = field1;
this.field2 = field2;
}
@Builder
public static class MyClassBuilder {
// 字段和方法
}
}
请注意,具体实现可能因你使用的库或框架而异。如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html,