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

沈阳的网站制作公司种子搜索神器

沈阳的网站制作公司,种子搜索神器,酷家乐网站做墙裙教程,网站建设方案平台选择【HarmonyOS 5】makeObserved接口详解 一、makeObserved接口是什么? makeObserved 接口(API version 12 起可用)用于将非观察数据转为可观察数据,适用于三方包类、Sendable 装饰的类、JSON.parse 返回的对象、collections.Array…

【HarmonyOS 5】makeObserved接口详解

一、makeObserved接口是什么?

makeObserved 接口(API version 12 起可用)用于将非观察数据转为可观察数据,适用于三方包类、@Sendable 装饰的类、JSON.parse 返回的对象、collections.Array/Set/Map 等场景。

不支持 undefined和null类型。以及V1 状态装饰器(@State/@Prop)及已被观察的数据,避免双重代理。主要处理的是Object类型,非Object类型,例如基本数据类型number这种,都不支持。

需要注意的是,makeObserved主要针对的是V2的使用场景。因为它是为了解决 @Trace/@ObservedV2 无法覆盖的痛点观察需求。比如从网络请求返回的JSON对象,需要在UI上进行观测操作。就可使用makeObserved。所以V1使用@State就可解决的问题,不用考虑这个。

二、makeObserved如何使用?

(1)接口调用
使用及其简单,只需要导入import { UIUtils } from '@kit.ArkUI’进行接口调用接口。麻烦的是识别你的入参是否支持观测监听。

import { UIUtils } from '@kit.ArkUI';class UserInfo {id: number = 0;
}
let observedInfo: UserInfo = UIUtils.makeObserved(new UserInfo()); 

(2)可从操作的业务场景进行区分,符合以下三种场景一般可操作:
1、三方SDK包中的数据类,这种情况下需要UI可监测,因为无法手动添加@Trace,一般可支持。
【该场景较为简单,参考上面示例即可】

2、@Sendable装饰的类,因为禁止动态修改属性,一般可支持。

import { taskpool } from '@kit.ArkTS';
import { UIUtils } from '@kit.ArkUI';// 定义@Sendable装饰的类(支持子线程传递)

class UserInfo {userId: number = 0;username: string = 'Guest';score: number = 0;isOnline: boolean = false;// 构造函数初始化数据constructor(userId: number, username: string) {this.userId = userId;this.username = username;}
}// 子线程任务:模拟数据处理(如网络请求/复杂计算)

function processDataInThread(userId: number): UserInfo {// 模拟耗时操作(子线程执行)let result = new UserInfo(userId, 'Loading...');setTimeout(() => {// 模拟数据更新result.score = Math.floor(Math.random() * 100);result.isOnline = true;}, 1000);return result;
}

struct SendableMakeObservedDemo {// 主线程可观察数据:通过makeObserved包装@Sendable对象 observedUser: UserInfo = UIUtils.makeObserved(new UserInfo(-1, '未登录'));build() {Column({ space: 20 }).width('100%').padding(30) {Text('@Sendable + makeObserved 演示').fontSize(24).fontWeight(500)// 显示用户信息Text(`用户ID: ${this.observedUser.userId}`).fontSize(18)Text(`用户名: ${this.observedUser.username}`).fontSize(18)Text(`分数: ${this.observedUser.score}`).fontSize(18)Text(`在线状态: ${this.observedUser.isOnline ? '在线' : '离线'}`).fontSize(18)// 触发子线程任务的按钮Button('加载用户数据(子线程处理)').onClick(() => {// 在子线程执行数据处理taskpool.execute(processDataInThread, 1001).then((user: UserInfo) => {// 子线程返回的@Sendable对象在主线程重新包装为可观察数据this.observedUser = UIUtils.makeObserved(user);});})// 本地修改数据的按钮(演示可观察性)Button('本地增加分数').onClick(() => {this.observedUser.score += 10; // 直接修改属性,触发UI刷新})}}
}

3、 JSON.parse返回的匿名对象,一般是网络请求反馈,一般可支持。

import { UIUtils } from '@kit.ArkUI';
import { JSON } from '@kit.ArkTS';// 定义 JSON 数据结构(示例接口)
interface UserData {name: string;age: number;email: string;
}

struct JsonMakeObservedDemo {// 原始 JSON 字符串private rawJson: string = '{"name": "Alice", "age": 25, "email": "alice@example.com"}';// 使用 makeObserved 包装 JSON.parse 返回的对象 observedData: UserData = UIUtils.makeObserved(JSON.parse(this.rawJson) as UserData);build() {Column({ space: 30 }).width('100%').padding(30) {// 显示 JSON 数据Text('JSON 可观察数据演示').fontSize(24).fontWeight(500)Text(`姓名: ${this.observedData.name}`).fontSize(18)Text(`年龄: ${this.observedData.age}`).fontSize(18)Text(`邮箱: ${this.observedData.email}`).fontSize(18)// 修改姓名的按钮Button('修改姓名为 "Bob"').onClick(() => {this.observedData.name = 'Bob'; // 直接修改属性,触发 UI 刷新})// 修改年龄的按钮Button('年龄 +1').onClick(() => {this.observedData.age++; // 数值类型修改,触发 UI 刷新})// 重置为原始数据的按钮Button('重置数据').onClick(() => {// 重新解析 JSON 并包装为可观察数据this.observedData = UIUtils.makeObserved(JSON.parse(this.rawJson) as UserData);})}}
}

三、注意

  1. getTarget问题
    通过getTarget获取原始对象后修改属性,不会触发UI刷新(需操作代理对象)

  2. 兼容性错误
    与@State等V1装饰器混用会抛异常,需使用V2装饰器(@Local/@Provide等)

http://www.dtcms.com/wzjs/164297.html

相关文章:

  • 河北建设工程信息网官网官网官如何优化seo技巧
  • 建材网站建设功能方案上海抖音seo公司
  • 网站内容与目录结构百度注册网站怎么弄
  • 广告游戏金华seo扣费
  • 网站优化排名方案域名备案
  • 太原市城市建设拆迁中心网站发布项目信息的平台
  • 提供定制型网站建设百度在西安有分公司吗
  • 泾川县门户网站留言企业官网怎么做
  • 网站升级改版需要多久郑州网站建设哪里好
  • wordpress 启动live2d单词优化和整站优化
  • 哪家网站株洲百度seo
  • 昆明高端网站建设公司互联网营销案例分析
  • 投票网站怎么做软文范例大全100
  • 网站可以自己做服务器么百度搜索风云榜单
  • 做高仿包的网站有哪些网页设计一般用什么软件
  • 建设企业网站要多少钱seo的特点是什么
  • 我想找一个电销外包团队四川seo平台
  • 网站开发销售怎么做百度搜索关键词统计
  • 做期货应关注什么网站seo零基础入门到精通200讲
  • 做非洲外贸的网站长沙关键词优化新行情报价
  • 做牛仔裤的视频网站谷歌play商店
  • 武夷山网站建设如何做网络推广赚钱
  • 怎么建设ftp网站推广发帖网站
  • 给自己的公司做网站怎么做好注册网站多少钱
  • 做网站 流量怎么抓钱扫图片识别图片原图
  • 百度收录收费 重大网站seo每日
  • 公网主机上做的网站如果访问郑州竞价托管
  • 要怎么做网站动图宁波网站建设公司
  • 心悦免做卡领取网站新网站友链
  • 传媒视频软件下载网站品牌seo如何优化