女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HarmonyOS 5 makeObserved接口詳解

HarmonyOS解決方案 ? 來(lái)源:HarmonyOS解決方案 ? 作者:HarmonyOS解決方案 ? 2025-06-16 17:58 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

HarmonyOS 5】makeObserved接口詳解

##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)#

一、makeObserved接口是什么?

makeObserved 接口(API version 12 起可用)用于將非觀察數(shù)據(jù)轉(zhuǎn)為可觀察數(shù)據(jù),適用于三方包類、@Sendable 裝飾的類、JSON.parse 返回的對(duì)象、collections.Array/Set/Map 等場(chǎng)景。

不支持 undefined和null類型。以及V1 狀態(tài)裝飾器(@State/@Prop)及已被觀察的數(shù)據(jù),避免雙重代理。主要處理的是Object類型,非Object類型,例如基本數(shù)據(jù)類型number這種,都不支持。

需要注意的是, makeObserved主要針對(duì)的是V2的使用場(chǎng)景 。因?yàn)樗菫榱私鉀Q @Trace/@ObservedV2 無(wú)法覆蓋的痛點(diǎn)觀察需求。比如從網(wǎng)絡(luò)請(qǐng)求返回的JSON對(duì)象,需要在UI上進(jìn)行觀測(cè)操作。就可使用makeObserved。所以V1使用@State就可解決的問(wèn)題,不用考慮這個(gè)。

二、makeObserved如何使用?

(1)接口調(diào)用
使用及其簡(jiǎn)單,只需要導(dǎo)入import { UIUtils } from '@kit.ArkUI'進(jìn)行接口調(diào)用接口。麻煩的是識(shí)別你的入?yún)⑹欠裰С钟^測(cè)監(jiān)聽。

import { UIUtils } from '@kit.ArkUI';


class UserInfo {
  id: number = 0;
}
let observedInfo: UserInfo = UIUtils.makeObserved(new UserInfo());

(2)可從操作的業(yè)務(wù)場(chǎng)景進(jìn)行區(qū)分,符合以下三種場(chǎng)景一般可操作:
1、三方SDK包中的數(shù)據(jù)類,這種情況下需要UI可監(jiān)測(cè),因?yàn)闊o(wú)法手動(dòng)添加@Trace,一般可支持。
【該場(chǎng)景較為簡(jiǎn)單,參考上面示例即可】

2、@Sendable裝飾的類,因?yàn)榻箘?dòng)態(tài)修改屬性,一般可支持。

import { taskpool } from '@kit.ArkTS';
import { UIUtils } from '@kit.ArkUI';

// 定義@Sendable裝飾的類(支持子線程傳遞)
@Sendable
class UserInfo {
  userId: number = 0;
  username: string = 'Guest';
  score: number = 0;
  isOnline: boolean = false;

  // 構(gòu)造函數(shù)初始化數(shù)據(jù)
  constructor(userId: number, username: string) {
    this.userId = userId;
    this.username = username;
  }
}

// 子線程任務(wù):模擬數(shù)據(jù)處理(如網(wǎng)絡(luò)請(qǐng)求/復(fù)雜計(jì)算)
@Concurrent
function processDataInThread(userId: number): UserInfo {
  // 模擬耗時(shí)操作(子線程執(zhí)行)
  let result = new UserInfo(userId, 'Loading...');
  setTimeout(() = > {
    // 模擬數(shù)據(jù)更新
    result.score = Math.floor(Math.random() * 100);
    result.isOnline = true;
  }, 1000);
  return result;
}

@Entry
@ComponentV2
struct SendableMakeObservedDemo {
  // 主線程可觀察數(shù)據(jù):通過(guò)makeObserved包裝@Sendable對(duì)象
  @Local 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(`分?jǐn)?shù): ${this.observedUser.score}`)
          .fontSize(18)
        
        Text(`在線狀態(tài): ${this.observedUser.isOnline ? '在線' : '離線'}`)
          .fontSize(18)
        
        // 觸發(fā)子線程任務(wù)的按鈕
        Button('加載用戶數(shù)據(jù)(子線程處理)')
          .onClick(() = > {
            // 在子線程執(zhí)行數(shù)據(jù)處理
            taskpool.execute(processDataInThread, 1001).then((user: UserInfo) = > {
              // 子線程返回的@Sendable對(duì)象在主線程重新包裝為可觀察數(shù)據(jù)
              this.observedUser = UIUtils.makeObserved(user);
            });
          })
        
        // 本地修改數(shù)據(jù)的按鈕(演示可觀察性)
        Button('本地增加分?jǐn)?shù)')
          .onClick(() = > {
            this.observedUser.score += 10; // 直接修改屬性,觸發(fā)UI刷新
          })
      }
  }
}

3、 JSON.parse返回的匿名對(duì)象,一般是網(wǎng)絡(luò)請(qǐng)求反饋,一般可支持。

import { UIUtils } from '@kit.ArkUI';
import { JSON } from '@kit.ArkTS';

// 定義 JSON 數(shù)據(jù)結(jié)構(gòu)(示例接口)
interface UserData {
  name: string;
  age: number;
  email: string;
}

@Entry
@ComponentV2
struct JsonMakeObservedDemo {
  // 原始 JSON 字符串
  private rawJson: string = '{"name": "Alice", "age": 25, "email": "[email protected]"}';
  
  // 使用 makeObserved 包裝 JSON.parse 返回的對(duì)象
  @Local observedData: UserData = UIUtils.makeObserved(JSON.parse(this.rawJson) as UserData);

  build() {
    Column({ space: 30 })
      .width('100%')
      .padding(30) {
        
        // 顯示 JSON 數(shù)據(jù)
        Text('JSON 可觀察數(shù)據(jù)演示')
          .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'; // 直接修改屬性,觸發(fā) UI 刷新
          })
        
        // 修改年齡的按鈕
        Button('年齡 +1')
          .onClick(() = > {
            this.observedData.age++; // 數(shù)值類型修改,觸發(fā) UI 刷新
          })
        
        // 重置為原始數(shù)據(jù)的按鈕
        Button('重置數(shù)據(jù)')
          .onClick(() = > {
            // 重新解析 JSON 并包裝為可觀察數(shù)據(jù)
            this.observedData = UIUtils.makeObserved(JSON.parse(this.rawJson) as UserData);
          })
      }
  }
}

三、注意

  1. getTarget問(wèn)題
    通過(guò)getTarget獲取原始對(duì)象后修改屬性,不會(huì)觸發(fā)UI刷新(需操作代理對(duì)象)
  2. 兼容性錯(cuò)誤
    與@State等V1裝飾器混用會(huì)拋異常,需使用V2裝飾器(@Local/@Provide等)

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8993

    瀏覽量

    153685
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2126

    瀏覽量

    32939
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    HarmonyOS 5】鴻蒙應(yīng)用隱私保護(hù)詳解

    HarmonyOS 5】鴻蒙應(yīng)用隱私保護(hù)詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、前言 在今天這個(gè)手機(jī)不離手的時(shí)代,我們每天
    的頭像 發(fā)表于 07-11 18:30 ?262次閱讀

    HarmonyOS 5】鴻蒙中進(jìn)度條的使用詳解

    HarmonyOS 5】鴻蒙中進(jìn)度條的使用詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、Ha
    的頭像 發(fā)表于 07-11 18:26 ?202次閱讀
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】鴻蒙中進(jìn)度條的使用<b class='flag-5'>詳解</b>

    HarmonyOS 5】鴻蒙星閃NearLink詳解

    HarmonyOS 5】鴻蒙星閃NearLink詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、前言 鴻蒙星閃NearLink K
    的頭像 發(fā)表于 07-11 18:24 ?286次閱讀
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】鴻蒙星閃NearLink<b class='flag-5'>詳解</b>

    HarmonyOS 5】鴻蒙mPaaS詳解

    HarmonyOS 5】鴻蒙mPaaS詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、mPaaS是什么? mPaaS 是 Mobi
    的頭像 發(fā)表于 07-11 18:23 ?257次閱讀
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】鴻蒙mPaaS<b class='flag-5'>詳解</b>

    HarmonyOS 5】金融應(yīng)用開發(fā)鴻蒙組件實(shí)踐

    HarmonyOS 5】金融應(yīng)用開發(fā)鴻蒙組件實(shí)踐 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、鴻蒙生態(tài)觀察 2024 年 1 月 18 日: 發(fā)布
    的頭像 發(fā)表于 07-11 18:20 ?263次閱讀
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】金融應(yīng)用開發(fā)鴻蒙組件實(shí)踐

    HarmonyOS 5】鴻蒙中的UIAbility詳解(二)

    HarmonyOS 5】鴻蒙中的UIAbility詳解(二) ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、前言 今天我們繼續(xù)深入講解
    的頭像 發(fā)表于 07-11 18:17 ?232次閱讀
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】鴻蒙中的UIAbility<b class='flag-5'>詳解</b>(二)

    HarmonyOS 5 入門系列 】鴻蒙HarmonyOS示例項(xiàng)目講解

    HarmonyOS 5 入門系列 】鴻蒙HarmonyOS示例項(xiàng)目講解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、前言:移動(dòng)開發(fā)
    的頭像 發(fā)表于 07-07 11:57 ?141次閱讀
    【 <b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b> 入門系列 】鴻蒙<b class='flag-5'>HarmonyOS</b>示例項(xiàng)目講解

    鴻蒙中Stage模型與FA模型詳解

    HarmonyOS 5】鴻蒙中Stage模型與FA模型詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、前言 在
    的頭像 發(fā)表于 07-07 11:50 ?151次閱讀

    HarmonyOS 5】應(yīng)用更新功能詳解

    關(guān)鍵詞:#HarmonyOS SDK應(yīng)用服務(wù)、#Appgallery connect、#應(yīng)用更新 在應(yīng)用開發(fā)場(chǎng)景中,功能迭代與調(diào)整是常態(tài)。為確保用戶使用體驗(yàn)不受影響,應(yīng)用內(nèi)更新彈窗提示是兼顧穩(wěn)定性
    發(fā)表于 06-22 18:44

    HarmonyOS 5】桌面快捷方式功能實(shí)現(xiàn)詳解

    HarmonyOS 5】桌面快捷方式功能實(shí)現(xiàn)詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、前言 在移動(dòng)應(yīng)用開發(fā)中,如何讓用戶快速
    的頭像 發(fā)表于 06-21 16:42 ?279次閱讀
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】桌面快捷方式功能實(shí)現(xiàn)<b class='flag-5'>詳解</b>

    HarmonyOS 5】VisionKit人臉活體檢測(cè)詳解

    HarmonyOS 5】VisionKit人臉活體檢測(cè)詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、VisionKit人臉活體
    的頭像 發(fā)表于 06-21 11:52 ?282次閱讀
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】VisionKit人臉活體檢測(cè)<b class='flag-5'>詳解</b>

    HarmonyOS 5】鴻蒙中的UIAbility詳解(三)

    HarmonyOS 5】鴻蒙中的UIAbility詳解(三) ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、前言 本文是鴻蒙中的UIA
    的頭像 發(fā)表于 06-14 22:32 ?36次閱讀

    HarmonyOS 5】鴻蒙CodeGenie AI輔助編程工具詳解

    HarmonyOS 5】鴻蒙CodeGenie AI輔助編程工具詳解 一、前言 1、CodeGenie是什么?CodeGenie (代碼精靈)作為鴻蒙DevEco IDE自帶的AI輔助編碼工具
    發(fā)表于 06-11 16:34

    HarmonyOS5云服務(wù)技術(shù)分享--認(rèn)證文檔問(wèn)題

    各位開發(fā)者朋友好!本文將詳細(xì)講解如何基于HarmonyOS ArkTS框架集成華為AppGallery Connect(AGC)認(rèn)證服務(wù),涵蓋從項(xiàng)目創(chuàng)建到SDK集成全流程。無(wú)論您是首次接入AGC服務(wù)
    發(fā)表于 05-22 13:20

    BTB擴(kuò)展接口:LCD、Camera、UART、I2C等|詳解

    今天我們來(lái)學(xué)習(xí)的是BTB擴(kuò)展接口的LCD、Camera、UART、I2C詳解,特別分享Air201硬件BTB擴(kuò)展接口相關(guān)內(nèi)容。
    的頭像 發(fā)表于 11-30 09:39 ?1072次閱讀
    BTB擴(kuò)展<b class='flag-5'>接口</b>:LCD、Camera、UART、I2C等|<b class='flag-5'>詳解</b>篇