@Reusable
@Component
struct ItemView {
@State monthItem: Month = {
month: '',
num: 0,
days: [],
lunarDays: [],
year: 0
};
// ...
aboutToReuse(params: Record<string, Object>): void {
hiTraceMeter.startTrace('reuse_' + (params.monthItem as Month).month, 1);
this.monthItem = params.monthItem as Month;
hiTraceMeter.finishTrace('reuse_' + (params.monthItem as Month).month, 1);
}
build() {
Flex({ wrap: FlexWrap.Wrap }) {
// ...
// 日期信息
ForEach(this.monthItem.days, (day: number, index: number) => {
// ...
}, (index: number): string => index.toString())
}
// ...
}
}
本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。
在上面的代码中,通过组件复用,在ItemView的aboutToReuse()接口中,将一个月的数据直接设置到状态变量monthItem中,这样下面的Flex就会收到状态变量变更的消息通知,从而刷新组件中的数据。
通过displaySync中的帧回调方法,将数据拆分到每一帧中进行加载和绘制,只需要在帧回调中修改自定义子组件ItemView中加载数据的方式。
首先,需要在ItemView中第一次使用时创建displaySync对象,设置期望帧率,添加帧回调的监听,然后进行启动。
然后,在监听中添加更新数据的代码。这里将每个月的数据更新拆分开来,第一步用来更新月份数据和计算总的执行步骤,最后一步将计数数据清空, 方便下一次数据的写入,其余需要执行步骤的多少根据每次加载数据量会有所改变。
最后,在aboutToReuse接口中将数据放入数组中,用于帧回调中开始执行数据更新。
本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。