HarmonyOS 鸿蒙Next @Reusable标注的Component,到底什么类型的变量需要在aboutToReuse的时候重新赋值?
HarmonyOS 鸿蒙Next @Reusable标注的Component,到底什么类型的变量需要在aboutToReuse的时候重新赋值?
更多关于HarmonyOS 鸿蒙Next @Reusable标注的Component,到底什么类型的变量需要在aboutToReuse的时候重新赋值?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
组件的构造参数,也就是你使用组件时传递的参数,都可以重新赋值,上面的参数TAG、card不能重新赋值,没有初值的变量必须赋值
另外[@Provide](/user/Provide)修饰的ability必须赋初值,否则会报错
Variables decorated by '[@State](/user/State)', '[@StorageLink](/user/StorageLink)', '[@StorageProp](/user/StorageProp)', '[@LocalStorageLink](/user/LocalStorageLink)', '[@LocalStorageProp](/user/LocalStorageProp)' and '[@Provide](/user/Provide)' must be initialized locally. <ArkTSCheck>
可以用以下demo验证
// xxx.ets
export class Message {
value: string | undefined;
constructor(value: string) {
this.value = value
}
}
@Entry
@Component
struct Index {
@State switch: boolean = true
@Provide card: string = ‘6666777’
build() {
Column() {
Button(‘Hello World’)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
this.switch = !this.switch
})
if (this.switch) {
Child({ message: new Message(‘Child’), card: ‘’, data: ‘222’, ability: ‘111’, iconIdx: 88 })
}
}
.height(“100%”)
.width(‘100%’)
}
}
@Reusable
@Component
struct Child {
private readonly TAG = ‘xxxxx’
itemIndex: number = -1
@Prop data: string
@Provide ability?: string = ‘222’;
@State @Watch(‘xx’) iconIdx: number = 0;
@Consume card: string
@State message: Message = new Message(‘AboutToReuse’);
aboutToReuse(params: Record<string, ESObject>) {
console.info(“Recycle Child”)
this.message = params.message as Message
this.itemIndex = params.itemIndex
this.data = params.data
this.ability = params.ability
}
build() {
Column() {
Text(this.message.value)
.fontSize(20)
Text(<span class="hljs-subst">${<span class="hljs-variable language_">this</span>.itemIndex}</span>
)
.fontSize(20)
Text(this.data)
.fontSize(20)
Text(this.ability)
.fontSize(20)
Text(<span class="hljs-subst">${<span class="hljs-variable language_">this</span>.iconIdx}</span>
)
.fontSize(20)
}
.borderWidth(2)
.height(100)
}
xx(changedPropertyName: string) {
}
}
参考文档:
更多关于HarmonyOS 鸿蒙Next @Reusable标注的Component,到底什么类型的变量需要在aboutToReuse的时候重新赋值?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
你这个不对,文档有明确说明透传的prop的参数,在复用的时候不用重新赋值
升级HarmonyOS后,发现手机的游戏性能也有了显著提升。
麻烦发下文档?
aboutToReuse(params:EsObject)其实params里面有所有能更新的参数,你可以按需重新赋值
就是这个按需,是怎么按需,怎么知道这个参数是不是需要赋值。
在HarmonyOS鸿蒙系统中,对于使用@Reusable
标注的Component,通常涉及状态管理和生命周期管理。在aboutToReuse
方法被调用时,需要重新赋值的变量主要是那些与组件的当前上下文或显示状态紧密相关的变量。这些变量包括但不限于:
-
UI状态变量:例如,用于控制组件显示或隐藏的标志位,或者组件中某些元素的当前状态(如选中、高亮等)。
-
与当前数据绑定的变量:如果组件显示的数据是动态变化的,且这些数据在组件复用时需要更新,那么这些数据绑定的变量需要在
aboutToReuse
中重新赋值。 -
事件监听器或回调:如果组件在复用时需要绑定不同的事件监听器或回调,这些监听器或回调也需要在
aboutToReuse
中重新设置。 -
临时存储的数据:例如,用于临时存储用户输入或操作结果的变量,这些数据在组件复用前需要清空或重置。
需要注意的是,重新赋值的变量应该是那些会随组件复用而改变的值,而对于一些固定不变或组件间共享的状态,则无需在aboutToReuse
中重新赋值。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html