当前位置: 首页 > news >正文

重庆建设工程公司网站html5手机网站开发经验

重庆建设工程公司网站,html5手机网站开发经验,中国建筑设计咨询公司,扬州建设教育信息网站【HarmonyOS】List组件多层对象嵌套ForEach渲染更新的处理 问题背景: 在鸿蒙中UI更新渲染的机制,与传统的Android IOS应用开发相比。开发会简单许多,开发效率提升显著。 一般传统应用开发的流程处理分为三步:1.画UI,…

【HarmonyOS】List组件多层对象嵌套ForEach渲染更新的处理

问题背景:
在鸿蒙中UI更新渲染的机制,与传统的Android IOS应用开发相比。开发会简单许多,开发效率提升显著。

一般传统应用开发的流程处理分为三步:1.画UI,2.获得or创建,处理数据,3.增删改数据,找到对应控件,更新到UI上。

而鸿蒙应用开发,大大提供效率其中一点,就是减少了第三步。我们只需要关心数据源的变化,数据自动会更新到对应的控件上。

这种处理机制,其实符合应用开发的时代潮流,目前Android和IOS最新框架机制都有相应类似的处理。例如swiftUI,Compose。并且Vue,Flutter整个刷新机制就是如此。

众所周知,在HarmonyOs的list组件渲染中,如果数据源列表对象是多个对象嵌套的处理,那最底层对象的属性更新时,UI界面是不会渲染的。因为检测不到,目前只能检测到第一层对象。

解决方案:

当然官方的api在持续迭代的过程中。对于冗余渲染,渲染的性能提升,还有多层对象嵌套的数据源更新问题,一直再迭代方法处理。

针对多层对象嵌套,底层对象属性修改后,UI不渲染的问题,有个比较简单又方便的处理方式,思路仅供参考。

即:深拷贝修改的item对象。

这样整个对象相当于都变化了,就符合第一层对象检测的机制,可以被系统捕获到刷新。

DEMO示例:

import { util } from '@kit.ArkTS';/*** 二级数据结构*/
class ChildInfo {index: number;constructor(index: number) {this.index = index;}
}/*** 一级数据结构*/
class ItemInfo {key: string = util.generateRandomUUID(true);name: string;icon: Resource;childInfo: ChildInfo;select: boolean;constructor(name: string, icon: Resource, index: number) {this.name = name;this.icon = icon;this.childInfo = new ChildInfo(index);this.select = false;}/*** 重新创建对象,深拷贝处理* @param itemInfo* @param index* @returns*/static deepCopy(itemInfo: ItemInfo, index: number){let info: ItemInfo = new ItemInfo(itemInfo.name, itemInfo.icon, index);info.select = itemInfo.select;info.key = itemInfo.key;info.childInfo = itemInfo.childInfo;return info;}
}/****/


struct ForeachPage {private TAG: string = "ForeachPage"; mListData: Array<ItemInfo> = [];aboutToAppear(): void {this.mListData.push(new ItemInfo('游戏', $r("app.media.iconA"), 1));this.mListData.push(new ItemInfo('游戏', $r("app.media.iconB"), 2));this.mListData.push(new ItemInfo('游戏', $r("app.media.iconA"), 3));this.mListData.push(new ItemInfo('游戏', $r("app.media.iconB"), 4));this.mListData.push(new ItemInfo('游戏', $r("app.media.iconA"), 5));this.mListData.push(new ItemInfo('游戏', $r("app.media.iconB"), 6));} ItemView(item: ItemInfo, index: number){Row() {Image(item.icon).width(px2vp(120)).height(px2vp(120))Text(item.name + "(" + item.childInfo.index + ")").fontSize(20)Blank()if(this.isLog(item, index)){if(item.select){Image($r("app.media.icon_check")).size({width: px2vp(72),height: px2vp(72)})}}}.width('100%').justifyContent(FlexAlign.Start).onClick(()=>{item.select = !item.select;if(item.select){item.childInfo.index = 666;}else{item.childInfo.index = index;}this.mListData[index] = ItemInfo.deepCopy(item, item.childInfo.index);console.log(this.TAG, " ItemView onClick: " + index + " item.select: " + item.select);})}private isLog(item: ItemInfo, index: number){console.log(this.TAG, " ItemView isLog index: " + index + " item.select: " + item.select);return true;}build() {List() {ForEach(this.mListData, (item: ItemInfo, index: number) => {ListItem() {this.ItemView(item, index)}}, (item: ItemInfo) => JSON.stringify(item))//}.width("100%").height("100%").padding({ left: px2vp(60), right: px2vp(60) })}
}

iconA
iconB
icon_check

http://www.yayakq.cn/news/21111/

相关文章:

  • 做口腔科网站网站开发运行环境论文
  • 怎么进电力建设公司网站做棋牌网站违法嘛
  • 网站前台登录模板公众号 创意名字
  • 青岛金桥建设机械有限公司网站做运动鞋评价的网站
  • 荆门网站建设南宁网站建设加q.479185700
  • 企业网站的一般要素有工商注册登记流程
  • 福建省住房和建设厅网站室内装饰设计是干什么的
  • 青岛市建设监督管理局网站网站空间数据
  • 建设网站的教程吉首企业自助建站
  • 企业门户网站开发公司做网站需要注册商标第几类
  • 搭建网站需要什么软件产品展示类网站
  • 怎样在网站上做销售太原企业网站模板建站
  • 移动手机号码网站响应式网站的制作工具
  • 策勒网站建设百度应用宝
  • 做外贸需关注的网站企业做网站和宣传册的作用
  • 河南省建设厅注册中心网站mvc网站开发视频教程
  • 找网站漏洞赚钱怎么做的企业网站开发工具
  • 网站没有内容可以备案吗服装搭配网站源码
  • 宝山做网站装修案例
  • 彩票网站开发dadi163微信做引流网站
  • 高端网站建设企业wordpress标签页固定连接以.html后缀结尾
  • 网站做seo屏蔽搜索三星网上商城app官方版
  • 电子商务网站系统建设实训心得网站的优化通过什么做上去
  • 西部数据网站建设2023楼市回暖潮无望了
  • 网站建设遇到哪些危险网站 工作室
  • 电子商务网站的建站流程产品做优化好还是超级网站好
  • 郑州做网站哪里好销售网站快速建立
  • 石家庄做网站建设的公司wordpress 免插件 浏览数
  • 中跃建设集团有限公司网站网站开发兼容极速字体颜色推荐
  • 佛山企业网站制作文成网站