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

菏泽市建设局网站电话手机wap网站源码

菏泽市建设局网站电话,手机wap网站源码,如何进行页面设计,外贸公司名字免费起名大全【HarmonyOS Next】鸿蒙状态管理装饰器V1和V2混用方案 一、V1和V2为什么需要混用 自从api7开始,一直到api10。V1的实际使用中,开发人员发现Observed和ObjectLink 监听实现多层级嵌套对象的更新的方案,太过于臃肿。当需要监听处理更新的多层…

【HarmonyOS Next】鸿蒙状态管理装饰器V1和V2混用方案

一、V1和V2为什么需要混用

自从api7开始,一直到api10。V1的实际使用中,开发人员发现@Observed和@ObjectLink 监听实现多层级嵌套对象的更新的方案,太过于臃肿。当需要监听处理更新的多层级对象是七八层,就需要配套创建七八层的ObjectLink,代码太过于冗余。

V2就是为了解决该问题,华为官方才提出的新状态管理装饰器方案。该方案在解决该问题的基础上,也对V1的进行加强。

但是考虑现实开发情况。基本上鸿蒙现有的应用都在24年930节点之前上架了。大量使用的都是V1方案。如果要迁移到V2上。改动量太大,不亚于重新开发界面刷新相关业务。

所以官方V1和V2目前是相关独立,也可混用。这种状态估计会持续很长时间。

但是不用V2,前面提到的嵌套更新问题又需要好的方案解决。所以就需要V1和V2混用。

当然如果是新项目,还是建议直接使用V2.

二、V1和V2混用方案

原则上,只使用@ObservedV2与@Trace装饰器来解决深层嵌套对象更新UI的问题。暂时不使用其他的V2装饰器,其他的状态管理依旧使用V1即可。
在这里插入图片描述

以下代码示例参考,只使用@ObservedV2与@Trace装饰器,解决深层嵌套对象更新UI的问题:

import { util } from '@kit.ArkTS';/*** 三级数据结构*/
 
class GrandsonInfo { content: string = "";}/*** 二级数据结构*/
  
class ChildInfo { index: number; grandsonInfo: GrandsonInfo;constructor(index: number, content: string) {this.index = index;this.grandsonInfo = new GrandsonInfo();this.grandsonInfo.content = content;}
}/*** 一级数据结构*/
  
class ItemInfo {key: string = util.generateRandomUUID(true); name: string; icon: Resource; childInfo: ChildInfo; select: boolean;constructor(name: string, icon: Resource, index: number, content: string) {this.name = name;this.icon = icon;this.childInfo = new ChildInfo(index, content);this.select = false;}
}/*** 多层嵌套刷新渲染*/


struct ObservedPage {private TAG: string = "ObservedPage";// @State无法混用,运行时报错// @State mListData: Array<ItemInfo> = [];mListData: Array<ItemInfo> = [];aboutToAppear(): void {this.mListData.push(new ItemInfo('游戏', $r("app.media.iconA"), 1, "鹅厂1"));this.mListData.push(new ItemInfo('游戏', $r("app.media.iconB"), 2, "鹅厂2"));this.mListData.push(new ItemInfo('游戏', $r("app.media.iconA"), 3, "鹅厂3"));this.mListData.push(new ItemInfo('游戏', $r("app.media.iconB"), 4, "鹅厂4"));this.mListData.push(new ItemInfo('游戏', $r("app.media.iconA"), 5, "鹅厂5"));this.mListData.push(new ItemInfo('游戏', $r("app.media.iconB"), 6, "鹅厂6"));}build() {List() {ForEach(this.mListData, (item: ItemInfo, index: number) => {ListItem() {Row() {Image(this.item.icon).width(px2vp(200)).height(px2vp(200))Text(this.item.name + "(" + this.item.childInfo.index + ")" + " [ " + this.item.childInfo.grandsonInfo.content + " ] ").fontSize(px2fp(52))Blank()if(this.isLog(this.item, this.index)){if(this.item.select){Image($r("app.media.icon_check")).size({width: px2vp(72),height: px2vp(72)})}}}.width('100%').justifyContent(FlexAlign.Start).onClick(()=>{this.item.select = !this.item.select;if(this.item.select){// 使用很方便,只需要直接改变item数据的任意层级属性值,变化就会同步刷新this.item.childInfo.index = 666;this.item.childInfo.grandsonInfo.content = "鹅厂23333"}else{this.item.childInfo.index = this.index;this.item.childInfo.grandsonInfo.content = "鹅厂" + this.index;}console.log(this.TAG, " ItemView onClick: " + this.index + " item.select: " + this.item.select);})}}, (item: ItemInfo) => JSON.stringify(item)) }.width("100%").height("100%").padding({ left: px2vp(60), right: px2vp(60) })}
}

三、V1和V2混用注意点

  1. 使用@ObservedV2与@Trace装饰的类不能和@State等V1的装饰器混合使用,编译时报错。
  2. 继承自@ObservedV2的类无法和@State等V1的装饰器混用,运行时报错。
  3. @ObservedV2的类实例目前不支持使用JSON.stringify进行序列化。
  4. @ObservedV2、@Trace不能与@Observed、@Track混合使用。
  5. @Trace是class中属性的装饰器,不能用在struct中。
  6. @Trace不能用在没有被@ObservedV2装饰的class上。
  7. @ObservedV2仅能装饰class,无法装饰自定义组件。
  8. 非@Trace装饰的成员属性用在UI上无法触发UI刷新。

文章转载自:

http://nr9Ntlth.bpptt.cn
http://2AdZ8vxB.bpptt.cn
http://z6FXfjGs.bpptt.cn
http://EeY13Dx1.bpptt.cn
http://zoZfeUzT.bpptt.cn
http://akOspIPv.bpptt.cn
http://KHqPuDNu.bpptt.cn
http://0oUrMkPq.bpptt.cn
http://UrSnk17X.bpptt.cn
http://IypjCtbk.bpptt.cn
http://9byBBdD9.bpptt.cn
http://ljHCmgfl.bpptt.cn
http://lrktSAwo.bpptt.cn
http://dkdG00td.bpptt.cn
http://P3HzEw8k.bpptt.cn
http://phGZYkju.bpptt.cn
http://qDzflNIq.bpptt.cn
http://BOmLVjbp.bpptt.cn
http://g8Plkq5c.bpptt.cn
http://SRDB1u6G.bpptt.cn
http://hC0khN5U.bpptt.cn
http://Ksps0UZw.bpptt.cn
http://tH7NWlmE.bpptt.cn
http://vEDme80N.bpptt.cn
http://CgMn8Luj.bpptt.cn
http://xTqanevu.bpptt.cn
http://2Ipcyrsj.bpptt.cn
http://Rjl4yZ6h.bpptt.cn
http://teOcCULG.bpptt.cn
http://HpBcn6Dd.bpptt.cn
http://www.dtcms.com/wzjs/706750.html

相关文章:

  • 商城类网站建设多少钱网站制作与设计知识点
  • 企业网站建设市场分析中石化胜利建设工程有限公司网站
  • 网站建设加盟招商营销策略有哪几种
  • 已有网站怎么做后台哪几个小说网站做网编拿的钱多
  • 可以做兼职翻译的网站开设计工作室赚钱吗
  • h5网站开发实例教程淘宝客怎么做自己网站推广
  • 网页加速器ios郑州企业网站优化多少钱
  • 制作社交app软件要多少钱做seo网站的公司
  • 网站建设佰金手指科杰十七建立本地网站
  • 域名与网站名称的关系东莞龙岗网站建设
  • 沂源网站建设郑州计算机培训机构
  • 医疗网站建设意见wordpress标题字体
  • 网站必做外链外贸网站推广策划
  • 娄底网站建设建站wordpress第一张缩略图
  • 做平台的网站有哪些功能WordPress如何清空评论
  • 轴承网站建设阿里云 搭建wordpress
  • 房地产网站建设联系方式常用网站设计缩略图
  • 自己做网站地址郑州企业健康码二维码怎么弄就是放在门口让人扫
  • 西宁网站公司建立平台网站需要花多少钱
  • 做网站一定要有空间吗wordpress与微信小程序
  • 智能网站建设哪家好263企业邮箱修改密码
  • 深圳网站建设联系电话珠海市网站建设品牌
  • 网站建设费包括什么做电商有哪些网站有哪些内容
  • 建设银行网站不主动弹出如wordpress
  • 知名室内设计网站做网站建设注册商标是多少类
  • 西安营销网站建设公司陇西学做网站
  • 网站建设用户核心官网浏览器
  • 怎么做电影引流网站虚拟机wordpress建站
  • 三合一网站怎么做做网站怎么样
  • 丹阳网站网站建设公司华网天下公司