鸿蒙@Reuseable不是只有在列表类组件(例如List)里才有用哦

52 阅读1分钟

1、在非列表类组件场景里,使用if频繁切换组件分支,@Reuseable也是可以发挥作用优化性能的

上代码

@Reusable
@Component
struct MessageCard {
    @ObjectLink message: Message
    // @State data: number = 0

    aboutToReuse(params: Record<string, Object>): void {
        hilog.debug(0x0000, 'MessageCard', 'aboutToReuse')
        // 非@ObjectLink/Link的属性需要在这里重新赋值:例如
        // this.data = params['data'] as number
    }

    build() {
        Column() {
            Text(this.message.title).onClick(() => {
                this.message.title = Math.random() + ''
            })
        }.backgroundColor(Color.Orange)
    }
}
@Entry
@Component
struct Index {
    @State show: boolean = true
    @State msg: Message = new Message('demo')

    aboutToAppear(): void {
    }

    build() {
        Column() {
            Button(this.show ?'隐藏' : '显示').onClick(() => {
                this.show = !this.show
            })
            MessageCard({
                message: this.msg
            })
            if (this.show) {
                MessageCard({
                    message: this.msg
                })
            }

        }.width('100%').height('100%').margin({ top: 100 })
    }
}

在此类场景中,虽然没有List之类的列表组件,但是如果频繁切换if条件去创建销毁较大的UI组件,也是会有性能消耗的,可以像上面代码一样,使用@Reuseable,框架会在将这个组件移除组件树时缓存起来等待在此需要的时候使用

对应有生命周期方法

aboutToReuse(params: Record<string, Object>): void {
    // 复用时调用
}

aboutToRecycle(): void {
    // 回收时调用
}