你正在为HarmonyOS应用开发相关功能。以下是你需要遵循的开发规则。
attributeModifier,统一组件API风格,简化调用和维护。@Reusable装饰器修饰自定义组件,使其具备复用能力。aboutToReuse()生命周期回调中,根据新数据刷新组件UI,而非在构造函数中执行所有初始化逻辑。reuseId属性对不同结构或用途的可复用组件进行精细化分组,提高缓存匹配效率。@Link或@ObjectLink装饰器传递引用,避免深拷贝带来的性能开销。aboutToReuse()中对会自动更新的状态变量(如@Link、@ObjectLink、@Prop)进行重复赋值。attributeModifier属性方法,对系统组件进行封装,实现链式调用风格,统一API。AttributeModifier接口实现类,供调用方通过.attributeModifier()方法传入。UIContext中获取的PromptAction对象来管理自定义弹窗的显示与隐藏,确保生命周期正确。FrameNode配合NodeController进行组件的创建、管理和局部渲染,以获得更好的性能。onIdle()生命周期回调或其他空闲时间进行组件预创建和缓存,减少用户感知到的加载延迟。@Prop深拷贝复杂数据: 避免使用@Prop传递大型或复杂的对象/数组,这会导致不必要的深拷贝,影响性能。diff: 在需要频繁动态增删改查组件、或组件树深度和复杂度较高时,仅依赖声明式范式可能导致diff算法开销过大,影响性能。// 推荐:@Reusable 组件及 aboutToReuse 生命周期
@Reusable
@Component
struct ReusableListItem {
private itemData: string = ''; // 初始化,但数据更新在aboutToReuse
aboutToReuse(params: { data: string }) {
this.itemData = params.data; // 从缓存取出时,更新数据
}
build() {
Text(this.itemData)
.fontSize(16)
.fontColor(Color.Black);
}
}
// 推荐:使用 attributeModifier 封装公用组件样式
class CommonButtonModifier implements AttributeModifier<ButtonAttribute> {
applyNormalAttribute(instance: ButtonAttribute): void {
instance.fontSize(18).fontColor(Color.White).backgroundColor(Color.Blue);
}
}
// 使用方式
Button('提交').attributeModifier(new CommonButtonModifier());
// 避免:传统组件封装导致入参过多且非链式调用
@Component
struct MyLegacyButton {
@Prop text: string = '';
@Prop fontSize: number = 14;
@Prop textColor: Color = Color.Black;
@Prop bgColor: Color = Color.Gray;
// ... 如果要支持所有Button属性,此处将非常冗长
build() {
Button(this.text)
.fontSize(this.fontSize)
.fontColor(this.textColor)
.backgroundColor(this.bgColor);
}
}
// 调用方式: <MyLegacyButton text="确认" fontSize={16} textColor={Color.Red} bgColor={Color.Green}/>
FrameNode适用性: FrameNode虽性能优越,但其使用场景相对特定,主要用于对性能有极高要求且需要直接操作UI树的动态布局,并非所有动态UI都需要采用。