1、前言
之前开发中,没有使用过@Reusable实现组件的复用,因为自己也不咋涉及高性能损耗。这次在看文档时发现了这个装饰器,实测发现可以避免组件的重复创建,所以在列表子组件比较多,并且频繁销毁重建的情况下适合使用该装饰器。
2、参考文档
3、核心思路
1. 创建一个用来渲染列表的数组
2. 列表的每项调用使用@Reusable装饰的组件
4、核心代码
@Reusable
@Component
struct myComponent {
@Prop item: number = 0
aboutToAppear(): void {
console.log("组件创建了" + this.item)
}
aboutToReuse(): void {
// 如果使用了@Reusable,那么不会重新创建,而是会复用
console.log("组件复用了" + this.item)
}
build() {
Text("这是 " + this.item)
.fontSize(20)
.width("100%")
.textAlign(TextAlign.Center)
}
}
5、运行效果




6、完整代码
Index.ets
@Entry
@Component
struct Index {
@State arrayNum: Array<number> = []
aboutToAppear(): void {
this.pushArray()
}
pushArray() {
this.arrayNum = []
for (let index = 0; index < 10; index++) {
this.arrayNum.push(index)
}
}
build() {
Column() {
Row({ space: 20 }) {
Button("清空列表")
.onClick(() => {
this.arrayNum = []
})
Button("创建列表")
.onClick(() => {
this.pushArray()
})
}
List() {
ForEach(this.arrayNum, (item: number) => {
ListItem() {
myComponent({ item: item })
}
})
}
.width("100%")
.height("90%")
}
}
}
@Reusable
@Component
struct myComponent {
@Prop item: number = 0
aboutToAppear(): void {
console.log("组件创建了" + this.item)
}
aboutToReuse(): void {
// 如果使用了@Reusable,那么不会重新创建,而是会复用
console.log("组件复用了" + this.item)
}
build() {
Text("这是 " + this.item)
.fontSize(20)
.width("100%")
.textAlign(TextAlign.Center)
}
}
以上是个人经验分享
觉得有帮助可以点赞或收藏