日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

HarmonyOS Next V2 @Monitor 和@Computed

萬少 ? 來源:jf_22972444 ? 作者:jf_22972444 ? 2025-04-02 18:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

HarmonyOS Next V2 @Monitor 和@Computed

@Monitor 介紹

@Monitor 是狀態(tài)把管理 V2 版本中的用于監(jiān)聽狀態(tài)變量修改的技術。

它可以直接用在

  1. @ComponentV2裝飾的自定義組件中,用于被@Local、@Param、@Provider@Comsumer、@Computed修飾的狀態(tài)變量中
  2. 對于深層次的數據,如深層次對象、對象數組等,需要搭配@ObservedV2、@Trace一起使用。
  3. 可以同時監(jiān)聽多個屬性
  4. 可以獲取到監(jiān)聽屬性的修改前后的數據變化

對比狀態(tài)管理 V1 中的@Watch

@Monitor@Watch功能要強大不少

  1. @Watch 不能用在@ComponentV2修飾的
  2. @Watch 不具備深度監(jiān)聽的功能
  3. @Watch 無法同時監(jiān)聽多個屬性
  4. @Watch 無法檢測 屬性修改前后的變化

@Monitor 監(jiān)聽單個屬性

@Entry
@ComponentV2
struct Index {
  @Local num: number = 100

  @Monitor("num")
  changeNum() {
    console.log("檢測到數據的修改啦")
  }

  build() {
    Column() {

      Button(`點擊修改 ${this.num}`)
        .onClick(() = > {
          this.num++
        })
    }
    .width("100%")
    .height("100%")
  }
}

@Monitor 同時監(jiān)聽多個屬性

@Entry
@ComponentV2
struct Index {
  @Local num: number = 100
  @Local age: number = 200

  // 同時監(jiān)聽多個狀態(tài)的修改
  @Monitor("num","age")
  changeNum() {
    console.log("檢測到數據的修改啦")
  }

  build() {
    Column() {
      Button(`點擊修改 num ${this.num}`)
        .onClick(() = > {
          this.num++
        })
      Button(`點擊修改 age ${this.age}`)
        .onClick(() = > {
          this.age++
        })
    }
    .width("100%")
    .height("100%")
  }
}

@Monitor 的回調函數

@Monitor 的回調函數可以給我們提供這樣的能力:

  1. 如果監(jiān)聽了多個狀態(tài),而只有一個狀態(tài)發(fā)生變化時, 可以給獲知到具體哪個狀態(tài)發(fā)生了變化
  2. 當狀態(tài)發(fā)生變化時,可以獲取到變化前后的兩個值

@Monitor 的回調函數的參數是 [IMonitor],它是一個對象,擁有兩個屬性

  1. dirty ,是一個字符串數組,里面存放了修改的狀態(tài)的名稱
  2. value,是一個函數,調用返回會返回一個新的對象,新對象中包含了 path:修改的狀態(tài)的名稱,before:修改前的數據,now:修改后的數據,另外 value() 調用時,如果不傳遞參數并且你是同時修改多個狀態(tài)的話,那么它只會返回第一個狀態(tài),如果傳遞了參數-狀態(tài)變量 那么就會返回該狀態(tài)變量的相關信息
@Entry
@ComponentV2
struct Index {
  @Local num: number = 100
  @Local age: number = 200

  // 同時監(jiān)聽多個狀態(tài)的修改
  @Monitor("num","age")
  changeNum(Monitor: IMonitor) {
    console.log("修改的狀態(tài)", Monitor.dirty)
    console.log("Monitor.value()", JSON.stringify(Monitor.value("age")))

  }

  build() {
    Column() {
      Button(`同時修改 num 和 age ${this.num}  ${this.age}`)
        .onClick(() = > {
          this.num++
          this.age++
        })

    }
    .width("100%")
    .height("100%")
  }
}

@Monitor 深度監(jiān)聽

@Monitor 需要和 @ObservedV2@Trace一起使用才能實現深度監(jiān)聽的效果,需要注意的是:

  1. @Monitor可以直接寫在 @ObserveV2 修飾的class
  2. @Monitor 也可以寫在正常的組件內
@ObservedV2
class Person {
  @Trace son: Son = new Son()
}

@ObservedV2
class Son {
  // @Monitor可以直接寫在 @ObserveV2 修飾的class中
  @Monitor("weight")
  weightChange() {
    console.log("1 兒子的體重修改了")
  }

  @Trace weight: number = 200
}


@Entry
@ComponentV2
struct Index {
  person: Person = new Person()
    // @Monitor 也可以寫在正常的組件內
  @Monitor("person.son.weight")
  weightChange() {
    console.log("2 兒子的體重唄修改了")
  }

  build() {
    Column() {
      Button(`修改兒子的體重${this.person.son.weight}`)
        .onClick(() = > {
          this.person.son.weight++
        })
    }
    .width("100%")
    .height("100%")
  }
}

@Monitor 的限制

在實際開發(fā)使用中,@Monitor也存在一些限制,無法監(jiān)聽內置類型(Array、Map、Date、Set)的 API 調用引起的變化,如當你檢測整個數組時,你對數組使用 pushsplice等常見方法修改數組,是無法檢測到的。當然,當整個數組被重新賦值時,可以檢測到它的變化

@ObservedV2
class Person {
  @Trace name: string = "小明"
}


@Entry
@ComponentV2
struct Index {
  @Local
  personList: Person[] = [new Person()]

  @Monitor("personList")
  weightChange() {
    console.log(" 檢測到數組修改了")
  }

  build() {
    Column() {
      Button("增加一個")
        .onClick(() = > {
          // 1 無效 - 無法檢測到數組發(fā)生了修改
          this.personList.push(new Person())


          // 2 有效 檢測到了數組發(fā)生修改
          // const newPerson = [...this.personList, new Person()]
          // this.personList = newPerson
        })
      ForEach(this.personList, (item: Person) = > {
        Text(item.name)
      })
    }
    .width("100%")
    .height("100%")
  }
}

另外可以通過.語法或者監(jiān)聽數組長度來變向實現檢測數組元素發(fā)生變化

.語法

@ObservedV2
class Person {
  @Trace name: string = "小明"
}


@Entry
@ComponentV2
struct Index {
  @Local
  personList: Person[] = [new Person()]

  @Monitor("personList.0")
  // 如果要單獨監(jiān)聽對象中的某個屬性  @Monitor("personList.0.name")
  weightChange() {
    console.log(" 檢測到數組修改了")
  }

  build() {
    Column() {
      Button("增加一個")
        .onClick(() = > {
          const p = new Person()
          p.name = "小黑"
          this.personList[0] = p
        })
      ForEach(this.personList, (item: Person) = > {
        Text(item.name)
      })
    }
    .width("100%")
    .height("100%")
  }
}

監(jiān)聽數組長度變化

@ObservedV2
class Person {
  @Trace name: string = "小明"
}


@Entry
@ComponentV2
struct Index {
  @Local
  personList: Person[] = [new Person()]

  @Monitor("personList.length")
  weightChange() {
    console.log(" 檢測到數組修改了")
  }

  build() {
    Column() {
      Button("增加一個")
        .onClick(() = > {
          const p = new Person()
          p.name = "小黑"
          this.personList.push(p)
        })
      ForEach(this.personList, (item: Person) = > {
        Text(item.name)
      })
    }
    .width("100%")
    .height("100%")
  }
}

@Computed

@Computed為計算屬性,可以監(jiān)聽數據變化,從而計算新的值。用法比較簡單

@Entry
@ComponentV2
struct Index {
  @Local num: number = 100

  @Computed
  get numText() {
    return this.num * 2
  }

  build() {
    Column() {
      Button("修改")
        .onClick(() = > {
          this.num++
        })
      Text(`原數據 ${this.num}`)
      Text(`計算后 ${this.numText}`)
    }
    .width("100%")
    .height("100%")
  }
}

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • HarmonyOS
    +關注

    關注

    80

    文章

    2157

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    uM-FPU V2 浮點協處理器:功能特性與應用指南

    uM-FPU V2 浮點協處理器:功能特性與應用指南 引言 在電子設計領域,浮點運算能力對于許多應用至關重要。Micromega Corporation 的 uM-FPU V2 浮點協處理器為
    的頭像 發(fā)表于 04-11 15:15 ?495次閱讀

    AA Boost Module V2:便捷的電源解決方案

    AA Boost Module V2:便捷的電源解決方案 在電子設計中,電源供應是一個關鍵問題。今天要給大家介紹的是DFRobot的獨家產品——AA Boost Module V2(SKU
    的頭像 發(fā)表于 03-27 12:50 ?232次閱讀

    如何在 VisionFive v2 上使用外部 GPU?

    如果舊的 amd gpu 在 VisionFive V2 上運行,我想使用帶有開源 amd 驅動程序的 amd gpu。我需要什么以及如何將 GPU 連接到 VisionFive v2
    發(fā)表于 03-13 06:38

    RDMA設計44:RoCE v2原語功能驗證與分析

    它是RoCE v2協議進行信息及數據交換的核心機制,也是DUT需要實現的核心機制之一,對該功能的仿真驗證需要考慮指令的提交數據包的組裝及發(fā)送、數據的DMA處理等。
    的頭像 發(fā)表于 02-25 09:26 ?341次閱讀
    RDMA設計44:RoCE <b class='flag-5'>v2</b>原語功能驗證與分析

    RDMA設計37:RoCE v2 子系統模型設計

    本博文主要交流設計思路,在本博客已給出相關博文160多篇,希望對初學者有用。注意這里只是拋磚引玉,切莫認為參考這就可以完成商用IP設計。 RoCE v2 子系統模型是用來模擬 RoCE v2 功能
    發(fā)表于 02-06 16:19

    RDMA設計30:RoCE v2 發(fā)送模塊2

    當 RoCE v2 發(fā)送模塊檢測到發(fā)送隊列非空時,則從發(fā)送隊列中讀取一個發(fā)送隊列條目,并判斷請求類型。根據不同的請求類型和請求長度進入不同的包生成流程,這一過程由請求狀態(tài)機實現。
    的頭像 發(fā)表于 01-27 11:56 ?859次閱讀
    RDMA設計30:RoCE <b class='flag-5'>v2</b> 發(fā)送模塊<b class='flag-5'>2</b>

    RDMA設計29:RoCE v2 發(fā)送及接收模塊設計2

    本博文主要交流設計思路,在本博客已給出相關博文約100篇,希望對初學者有用。注意這里只是拋磚引玉,切莫認為參考這就可以完成商用IP設計。 (1)RoCE v2 發(fā)送模塊 RoCE v2 發(fā)送模塊
    發(fā)表于 01-26 16:47

    RDMA設計28:RoCE v2 發(fā)送及接收模塊設計

    本博文主要交流設計思路,在本博客已給出相關博文約100篇,希望對初學者有用。注意這里只是拋磚引玉,切莫認為參考這就可以完成商用IP設計。 RoCE v2 發(fā)送及接收模塊負責將用戶指令組裝為 RoCE
    發(fā)表于 01-25 10:45

    RDMA設計19:RoCE v2 發(fā)送及接收模塊設計

    本博文主要交流設計思路,在本博客已給出相關博文約100篇,希望對初學者有用。注意這里只是拋磚引玉,切莫認為參考這就可以完成商用IP設計。 RoCE v2 發(fā)送及接收模塊負責將用戶指令組裝
    發(fā)表于 01-06 08:08

    AURIX? Audio Application Kit for AURIX? lite Kit V2 深度解析

    AURIX? Audio Application Kit for AURIX? lite Kit V2 深度解析 在音頻技術不斷發(fā)展的今天,一款功能強大且靈活的音頻應用套件對于電子工程師來說至關重要
    的頭像 發(fā)表于 12-20 20:35 ?1483次閱讀

    uIO-Stick v2 用戶指南:設計、應用與安全要點

    uIO-Stick v2 用戶指南:設計、應用與安全要點 在電子工程領域,接口設備對于連接不同系統和實現功能交互起著至關重要的作用。uIO-Stick v2 作為一款用于 MOTIX? MCU 設備
    的頭像 發(fā)表于 12-20 11:10 ?902次閱讀

    RDMA設計5:RoCE V2 IP架構

    上面分析,基于RoCE v2 高速數據傳輸IP 的高速傳輸應用整體架構如圖 1 所示。 圖1 基于RoCE V2 IP應用的系統整體架構圖 它通過 QSFP28 接口連接上位機進行
    發(fā)表于 11-25 10:34

    RDMA over RoCE V2設計1:為什么要設計它?

    基于PC-PC或GPU-GPU之間RDMA設計已有較多廠商投入,雖然有的大廠投入幾年后折羽而歸,但不影響PC領域成熟應用產品的推廣。這里主要討論在FPGA上設計RDMA over RoCE V2,雖然已有xilinx的ernic應用,但是性價比以及國產化需求還是有其發(fā)展空間。
    的頭像 發(fā)表于 07-15 10:58 ?839次閱讀
    RDMA over RoCE <b class='flag-5'>V2</b>設計1:為什么要設計它?

    第三屆大會回顧第6期 | HarmonyOS NEXT原生智能,助力應用低成本生而智能

    原生智能是HarmonyOS NEXT的核心能力之一,通過將人工智能(AI)技術與操作系統深度融合,實現了從底層到應用層的全面智能化。HarmonyOS NEXT的原生智能是如何實現的
    的頭像 發(fā)表于 07-14 18:04 ?1343次閱讀
    第三屆大會回顧第6期 | <b class='flag-5'>HarmonyOS</b> <b class='flag-5'>NEXT</b>原生智能,助力應用低成本生而智能

    第三屆大會回顧第2期 | HarmonyOS NEXT內核驅動生態(tài)兼容與競爭力思考

    隨著HarmonyOS NEXT生態(tài)和技術的發(fā)展,驅動框架作為北向和南向的生態(tài)中樞,有很多的機會。例如,提供更多的信息到應用層,實現精準的性能功耗控制;打破傳統的分層解耦,簡化關鍵協議、關鍵路徑等等。
    的頭像 發(fā)表于 05-19 19:17 ?2011次閱讀
    第三屆大會回顧第<b class='flag-5'>2</b>期 | <b class='flag-5'>HarmonyOS</b> <b class='flag-5'>NEXT</b>內核驅動生態(tài)兼容與競爭力思考
    临澧县| 从江县| 朝阳区| 巴青县| 泰顺县| 津市市| 深圳市| 阳朔县| 龙陵县| 枣强县| 绥阳县| 随州市| 海兴县| 禹州市| 嘉善县| 县级市| 吴桥县| 武义县| 民乐县| 益阳市| 通化市| 洛隆县| 玛纳斯县| 邢台县| 永州市| 康乐县| 镇沅| 定南县| 德昌县| 松桃| 通渭县| 陵川县| 汾阳市| 广宗县| 汶上县| 琼海市| 广水市| 噶尔县| 林口县| 永清县| 铅山县|