HarmonyOS鸿蒙Next中AppStorage章节用这个案例说明用emit代替可以减小界面刷新带来的开销是不是不太合适,因为这个案例最终还是刷新了界面,真的降低了开销么?
HarmonyOS鸿蒙Next中AppStorage章节用这个案例说明用emit代替可以减小界面刷新带来的开销是不是不太合适,因为这个案例最终还是刷新了界面,真的降低了开销么?
// xxx.ets
import emitter from ‘@ohos.events.emitter’;
let NextID: number = 0;
class ViewData { title: string; uri: Resource; color: Color = Color.Black; id: number;
constructor(title: string, uri: Resource) { this.title = title; this.uri = uri this.id = NextID++; } }
@Component struct Gallery2 { dataList: Array<ViewData> = [new ViewData(‘flower’, $r(‘app.media.icon’)), new ViewData(‘OMG’, $r(‘app.media.icon’)), new ViewData(‘OMG’, $r(‘app.media.icon’))] scroller: Scroller = new Scroller() private preIndex: number = -1
build() { Column() { Grid(this.scroller) { ForEach(this.dataList, (item: ViewData) => { GridItem() { TapImage({ uri: item.uri, index: item.id }) }.aspectRatio(1) }, (item: ViewData) => JSON.stringify(item)) }.columnsTemplate(‘1fr 1fr’) } } }
@Component export struct TapImage { @State tapColor: Color = Color.Black; private index: number = 0; private uri: Resource = { id: 0, type: 0, moduleName: “”, bundleName: “” };
onTapIndexChange(colorTag: emitter.EventData) { if (colorTag.data != null) { this.tapColor = colorTag.data.colorTag ? Color.Red : Color.Black } }
aboutToAppear() { //定义事件ID let innerEvent: emitter.InnerEvent = { eventId: this.index } emitter.on(innerEvent, data => { this.onTapIndexChange(data) }) }
build() { Column() { Image(this.uri) .objectFit(ImageFit.Cover) .border({ width: 5, style: BorderStyle.Dotted, color: this.tapColor }) } } }
更多关于HarmonyOS鸿蒙Next中AppStorage章节用这个案例说明用emit代替可以减小界面刷新带来的开销是不是不太合适,因为这个案例最终还是刷新了界面,真的降低了开销么?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS鸿蒙Next中AppStorage章节用这个案例说明用emit代替可以减小界面刷新带来的开销是不是不太合适,因为这个案例最终还是刷新了界面,真的降低了开销么?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,AppStorage的emit机制确实可以减少不必要的界面刷新。虽然案例中最终界面仍然刷新了,但emit的作用在于仅在数据真正变化时触发刷新,避免了频繁的无效刷新。这种机制通过减少不必要的渲染操作,确实降低了开销,提升了应用性能。因此,使用emit是合理的优化手段。