精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何監聽多層狀態的變化(使用@State、@Observed、@ObjectLink裝飾器)

開發 前端
本文就為大家介紹如何配合使用@State、@Observed、@ObjectLink三個裝飾器監聽多層狀態變化。本例最終實現效果為:將工程資源文件中png格式的圖片轉換為jpg格式,并保存在設備中。由于本例不涉及UI講解,所以不在此提供UI效果。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

如何監聽多層狀態變化

場景說明

應用開發過程中,當希望通過狀態變量控制頁面刷新時,大家通常想到的就是裝飾器@State,但是在嵌套場景下,單單使用@State并不能監聽到變量的狀態變化,這就引出了@Observed/@ObjectLink裝飾器。本文就為大家介紹如何配合使用@State、@Observed、@ObjectLink三個裝飾器監聽多層狀態變化。

概念原理

在講解具體操作前,大家先理解以下幾個概念:

  • 第一層狀態變化:指不包含嵌套關系的變量的變化,比如string、number、boolean等基礎數據類型的狀態變化,以及嵌套結構中第一層變量的狀態變化。
  • 多層狀態變化:指包含嵌套關系的二層及以下變量的變化,比如嵌套類中被嵌套類的成員變量的狀態變化,嵌套數組中被嵌套數組的狀態變化等。

第一層變量的狀態變化可以用@State監聽,二層及以下變量的狀態變化則需要使用@Observed/@ObjectLink監聽。以嵌套結構舉例,如下圖:

如何監聽多層狀態的變化(使用@State、@Observed、@ObjectLink裝飾器)-開源基礎軟件社區如何監聽多層狀態的變化(使用@State、@Observed、@ObjectLink裝飾器)-開源基礎軟件社區

為便于理解,通過以下例子具體說明單層和多層狀態變化:

class ClassB {
  public c: number;

  constructor(c: number) {
    this.c = c;
  }
}

class ClassA {
  // ClassB成員變量的類型為ClassA,ClassA為被嵌套類
  public b: ClassB;

  constructor(b: ClassB) {
    this.b = b;
  }
}

a: ClassA
// 變量b為ClassA的成員變量,為第一層變量,所以變量b的狀態變化即為第一層狀態變化
this.a.b = new ClassB(0)
// 變量c為被嵌套類ClassB的成員變量,變量c的狀態變化即為第二層狀態變化
this.a.b.c = 5

監聽第一層狀態變化

監聽第一層狀態變化可以使用@State修飾變量,變量發生變化后即可同步刷新UI,這是大家最常用的場景,為便于理解,此處舉例說明一下:

class ClassA {
  public a:number

  constructor(a:number) {
    this.a = a;
  }
}

@Entry
@Component
struct ViewA {
  // 使用@State修飾變量class_A,以監聽其變化
  @State class_A: ClassA = new ClassA(0);

  build() {
    Column() {
      Row(){
        Button(`第一層變量+1`)
          .margin({top:10,right:20})
          .backgroundColor('#E8A027')
          .onClick(() => {
            // class_A的成員變量a加1,class_A發生變化
            this.class_A.a += 1;
          })
        // 將第一層變量在UI呈現出來
        Text(`${this.class_A.a}`)
      }
      .margin({top:50})

      Row(){
        Button(`第一層變量變為2`)
          .margin({top:10,right:20})
          .onClick(() => {
            // 將新的ClassA實例賦值給class_A,class_A發生變化
            this.class_A = new ClassA(2);
          })
        // 將第一層變量在UI呈現出來
        Text(`${this.class_A.a}`)
      }
    }
    .width('100%')
    .justifyContent(FlexAlign.Center)
  }
}

效果如下,如圖可以看出第一層變量發生變化后可以實時在UI呈現出來,所以@State可以有效的監聽第一層變量的狀態變化:

如何監聽多層狀態的變化(使用@State、@Observed、@ObjectLink裝飾器)-開源基礎軟件社區如何監聽多層狀態的變化(使用@State、@Observed、@ObjectLink裝飾器)-開源基礎軟件社區

監聽多層狀態變化

接下來,我們介紹如何使用@Observed/@ObjectLink監聽多層狀態變化。
在第一層狀態監聽的基礎上我們引入ClassB,構造一個嵌套結構,從而具有多層變量,如下:

// 引入ClassB
class ClassB {
  public b: number;

  constructor(b: number) {
    this.b = b;
  }
}


class ClassA {
  // ClassA成員變量a的類型為ClassB,從而形成嵌套結構,ClassB的成員變量b為第二層變量
  public a:ClassB

  constructor(a:ClassB) {
    this.a = a;
  }
}

此時我們可以驗證一下,如果僅使用@State是否可以監聽到第二層變量的變化:

// 引入ClassB
class ClassB {
  public b: number;

  constructor(b: number) {
    this.b = b;
  }
}

class ClassA {
  // ClassA成員變量a的類型為ClassB,從而形成嵌套結構,ClassB的成員變量b為第二層變量
  public a:ClassB

  constructor(a:ClassB) {
    this.a = a;
  }
}

@Entry
@Component
struct ViewA {
  // 使用@State修飾變量class_A
  @State class_A: ClassA = new ClassA(new ClassB(0));

  build() {
    Column() {
      Row(){
        // 點擊按鈕,第二層變量發生變化
        Button('第二層變量+1')
          .margin({top:10,right:20})
          .backgroundColor('#E8A027')
          .onClick(() => {
            // 第二層變量變化,嵌套類ClassB的成員變量b加1
            this.class_A.a.b += 1;
          })
        // 將第二層變量在UI呈現出來
        Text(`${this.class_A.a.b}`)
      }
      .margin({top:50})
    }
    .width('100%')
    .justifyContent(FlexAlign.Center)
  }
}

效果如下,可以看出當第二層變量發生變化時,UI沒有任何變化,所以單純使用@State不能監聽到二層及以下變量的變化:

如何監聽多層狀態的變化(使用@State、@Observed、@ObjectLink裝飾器)-開源基礎軟件社區如何監聽多層狀態的變化(使用@State、@Observed、@ObjectLink裝飾器)-開源基礎軟件社區

接下來我們使用@Observed/@ObjectLink監聽本例中第二層變量的變化。
根據使用規則,需要使用@Observed修飾嵌套類,使用@ObjectLink修飾嵌套類的實例,且@ObjectLink不能在被@Entry修飾的組件中使用,所以我們構建一個子組件,然后在父組件中進行引用,具體代碼如下:

// 使用@Observed修飾ClassB
@Observed
class ClassB {
  public b: number;

  constructor(b: number) {
    this.b = b;
  }
}

class ClassA {
  // ClassA成員變量a的類型為ClassB,從而形成嵌套結構,ClassB的成員變量b為第二層變量
  public a:ClassB

  constructor(a:ClassB) {
    this.a = a;
  }
}

// 構建子組件ViewB用于承載@ObjectLink修飾的變量
@Component
struct ViewB {
  // 使用@ObjectLink修飾ClassB的實例class_B
  @ObjectLink class_B: ClassB;
  build() {
    Row() {
      // 將ClassB的成員變量b在UI呈現出來
      Text(`${this.class_B.b}`)
    }
    .margin({top:100})
  }
}

@Entry
@Component
struct ViewA {
  @State class_A: ClassA = new ClassA(new ClassB(0));

  build() {
    Column() {
      ViewB({ class_B: this.class_A.a })
      Row(){
        // 點擊按鈕,第二層變量發生變化
        Button('第二層變量class_B.b加1')
          .margin({top:10,right:20})
          .backgroundColor('#E8A027')
          .onClick(() => {
            // 第二層變量變化,嵌套類ClassB的成員變量b加1
            this.class_A.a.b += 1;
          })
      }
      .margin({top:50})
    }
    .width('100%')
    .justifyContent(FlexAlign.Center)
  }
}

我們來看下效果:

如何監聽多層狀態的變化(使用@State、@Observed、@ObjectLink裝飾器)-開源基礎軟件社區如何監聽多層狀態的變化(使用@State、@Observed、@ObjectLink裝飾器)-開源基礎軟件社區

如圖,現在當二層變量發生變化時,可以完美的被監聽到,并在UI中刷新出來了。

當然,嵌套數組等也是同樣的原理,大家可以參考官方指南進行嘗試。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2010-02-01 17:50:32

Python裝飾器

2022-09-14 08:16:48

裝飾器模式對象

2022-05-10 09:12:16

TypeScript裝飾器

2023-08-10 17:23:39

2023-12-01 14:57:22

TCP連接

2023-12-14 08:25:14

WatchVue.js監聽數據

2023-11-29 16:29:09

線程java

2022-09-19 23:04:08

Python裝飾器語言

2025-01-22 15:58:46

2024-09-12 15:32:35

裝飾器Python

2015-01-06 09:11:54

TCP

2024-11-04 15:30:43

Python裝飾器函數

2015-08-07 15:42:21

網絡監聽源碼

2021-09-03 08:23:21

Vue 插槽子組件

2009-12-25 18:12:43

WPF裝飾器

2016-11-01 09:24:38

Python裝飾器

2023-01-06 08:55:00

2023-02-07 07:47:52

Python裝飾器函數

2023-10-26 07:15:46

2025-05-29 01:00:00

文件監聽函數
點贊
收藏

51CTO技術棧公眾號

91色精品视频在线| 精品人伦一区二区色婷婷| 亚洲国产精品久久久久婷婷老年| 中国a一片一级一片| 羞羞答答成人影院www| 精品久久久久一区| 麻豆传传媒久久久爱| 国产黄网站在线观看| 成人精品小蝌蚪| 国产精品久久久久久av下载红粉| 欧美xxxooo| 牛牛影视久久网| 欧美日韩一区二区欧美激情| 草草视频在线免费观看| h视频在线播放| 成人黄色av网站在线| 国产精品激情av电影在线观看 | 日本一区二区三区dvd视频在线| 成人国产在线激情| 神马久久久久久久| 91久久亚洲| 美女av一区二区三区| 国产成人av一区二区三区不卡| 成人在线啊v| 日本电影亚洲天堂一区| 国产成人亚洲综合无码| av在线首页| 91在线视频免费91| 91丨九色丨国产| 国产精品高清无码| 香蕉成人久久| 久久久视频免费观看| 中文字幕观看av| 精品视频免费| 亚洲欧美日韩图片| 男女性杂交内射妇女bbwxz| 高清久久一区| 欧美日韩精品一区二区三区| 久久久久久久久久久久久久国产| а√天堂资源官网在线资源| 伊人色综合久久天天| 亚洲欧美国产不卡| av电影在线观看一区二区三区| 久久免费午夜影院| 免费看成人午夜电影| 欧美一区二区在线观看视频| 国产成人精品亚洲777人妖| 91精品在线国产| 亚洲一区二区人妻| 激情综合网天天干| 亚洲free性xxxx护士hd| 国产免费叼嘿网站免费| 久久精品国产99| 国产免费观看久久黄| 国产精品国产精品国产| 日韩电影在线一区| 国产精品一区二区三区成人| 最近中文字幕av| 久久精品国产在热久久| 国产精品久在线观看| 亚洲天堂视频在线播放| 日本亚洲天堂网| 国产精品丝袜久久久久久高清 | 欧美一级欧美一级在线播放| 久久精品国产露脸对白| 天堂va欧美ⅴa亚洲va一国产| 在线成人高清不卡| 99热这里只有精品2| 亚洲国产高清在线观看| 欧美va亚洲va在线观看蝴蝶网| 日韩精品――色哟哟| 91成人午夜| 日韩av一区在线| 久久久久久九九九九九| 精品毛片免费观看| 日韩三级成人av网| 欧美激情精品久久| 国产欧美短视频| 国产成人一区二区三区电影| 中文字幕欧美色图| 国产精品自拍一区| 精品欧美一区二区三区久久久| 五月婷在线视频| 欧美极品另类videosde| 肉大捧一出免费观看网站在线播放| 青青草原国产在线| 色综合一区二区三区| 91视频这里只有精品| 97品白浆高清久久久久久| 亚洲精品天天看| 国产午夜精品理论片在线| 影音先锋一区| 国产精品爽黄69| 欧美性猛交 xxxx| 国产视频一区二区在线| 少妇一晚三次一区二区三区| 裤袜国产欧美精品一区| 91精品国产乱码| 免费看黄色aaaaaa 片| 91精品电影| 欧洲亚洲在线视频| 99草在线视频| 久久久.com| 日韩 欧美 视频| 欧美高清xxx| 亚洲女人天堂网| 久热这里有精品| 首页亚洲欧美制服丝腿| av一区二区三区四区电影| 番号集在线观看| 亚洲一区二区三区四区的| 日韩无套无码精品| 成人台湾亚洲精品一区二区| 色综合伊人色综合网站| 午夜影院免费在线观看| 国产精品99久久久久久似苏梦涵| 日本一区二区久久精品| segui88久久综合| 欧美精品1区2区3区| 久久精品视频18| 亚洲国产日韩欧美一区二区三区| 成人免费淫片aa视频免费| 精品视频二区| 欧美性猛交xxxx久久久| 亚洲成人福利视频| 久久久国产精品| 国产精品欧美风情| 无码精品黑人一区二区三区| 一区二区三区四区中文字幕| 亚洲欧美自拍另类日韩| 九九热爱视频精品视频| 国语自产偷拍精品视频偷 | 日韩成人免费视频| 久久亚洲成人av| 激情成人综合网| 亚洲午夜在线观看| 国产乱子精品一区二区在线观看| 亚洲美女在线看| 国产成人无码精品| 成人精品亚洲人成在线| 欧美做暖暖视频| 亚洲精品18| 欧美国产精品日韩| a天堂在线观看视频| 亚洲狼人国产精品| 最新免费av网址| 亚洲人metart人体| 成人在线小视频| 国产高清一区二区三区视频 | 久久久久蜜桃| 成人乱人伦精品视频在线观看| 香蕉视频在线播放| 欧美高清视频在线高清观看mv色露露十八 | 91最新地址在线播放| 免费成人午夜视频| 最新国产精品视频| 国产精品久久99久久| www视频在线观看免费| 欧美艳星brazzers| 久久久久久久麻豆| 国产很黄免费观看久久| 久青草视频在线播放| 白白在线精品| 欧日韩不卡在线视频| 懂色一区二区三区| 欧美美女网站色| 欧美成欧美va| 91丨porny丨户外露出| 激情综合网婷婷| 欧美综合在线视频观看| 成人黄色免费在线观看| 免费影视亚洲| 日韩精品在线看| 狠狠狠狠狠狠狠| 亚洲欧洲av一区二区三区久久| 99热这里只有精品2| 国产视频一区欧美| 天堂精品一区二区三区| 久久久久亚洲精品中文字幕| 欧美激情中文字幕乱码免费| 免费在线视频你懂得| 欧美日韩国产免费一区二区| 九九久久免费视频| 久久久91精品国产一区二区精品| 思思久久精品视频| 91久久亚洲| 亚洲精品一品区二品区三品区| 日韩有吗在线观看| 欧洲成人在线观看| 成人三级网址| 亚洲乱码一区二区| av在线亚洲天堂| 欧美午夜激情视频| 麻豆天美蜜桃91| 久久久久国产一区二区三区四区| 婷婷激情5月天| 国产精品亚洲综合久久| youjizz.com亚洲| 婷婷综合成人| 91av一区二区三区| 成人黄色免费网站| 欧美俄罗斯乱妇| 91在线网址| 国产视频久久久久久久| 国产日韩欧美视频在线观看| 日韩欧美黄色动漫| 久久久久久久久97| 国产精品美女一区二区三区| 精品人妻一区二区免费| 久久精品国产精品青草| 无码人妻丰满熟妇区毛片18| 欧美精品九九| 亚洲精品乱码久久久久久蜜桃91| 欧美综合精品| 成人在线视频网址| 亚洲成人a级片| 日本精品视频在线观看| 国产后进白嫩翘臀在线观看视频| 少妇精69xxtheporn| 日韩欧美电影在线观看| 欧美不卡一区二区三区| 91影院在线播放| 日本韩国欧美一区| 国产91精品一区| 精品久久久久久中文字幕| 久操免费在线视频| 亚洲欧美国产三级| 麻豆明星ai换脸视频| 国产精品久久夜| 亚洲理论片在线观看| 久久综合视频网| 国产麻豆剧传媒精品国产av| 国产成人高清视频| 三级黄色片免费观看| 九九热在线视频观看这里只有精品| 中文字幕永久视频| 日本大胆欧美人术艺术动态 | 韩国欧美国产一区| 91亚洲精品久久久蜜桃借种| 美女性感视频久久| 久久国产精品国产精品| 秋霞午夜鲁丝一区二区老狼| 亚洲精品一二三四五区| 久久综合导航| 91n.com在线观看| 日韩av电影免费观看高清完整版| 黄色一级大片在线观看| 久久久久久久欧美精品| 精品少妇无遮挡毛片| 奇米影视在线99精品| 538任你躁在线精品免费| 免费在线成人网| 三级一区二区三区| 国产精品一品二品| 91精品人妻一区二区三区四区| 成人在线视频首页| 在线观看国产三级| 国产亚洲福利社区一区| 一级片黄色录像| 亚洲免费观看在线观看| 国产一级做a爱免费视频| 亚洲成av人在线观看| wwwwww国产| 欧美三级电影网| 午夜精品久久久久久久爽| 亚洲国产精品美女| 久久久pmvav| 中文字幕亚洲综合久久| 黄色免费在线观看网站| 色综合久久88| 日韩脚交footjobhdboots| 国产不卡视频在线| 在线日韩三级| 国产一区二区三区免费不卡| 国产成人ay| 在线观看一区欧美| 影音先锋一区| 奇米影音第四色| 国产精品一二三| 免费观看av网站| 亚洲欧美一区二区视频| 国产精品30p| 色欧美日韩亚洲| a在线观看免费| 亚洲精品一区在线观看香蕉| 黄色免费在线看| 4438全国成人免费| 伊人久久精品| 精品欧美日韩| 午夜欧美在线| 久久9精品区-无套内射无码| 久久精品国产第一区二区三区| 成人做爰69片免费| 国产免费观看久久| 久久久久久久伊人| 欧美日韩成人综合天天影院| 天堂网av在线播放| 久久精品久久久久电影| 樱花草涩涩www在线播放| 91在线网站视频| 精品国产一区二区三区| 日韩小视频在线播放| 久久se这里有精品| 国产在线观看无码免费视频| 亚洲精品国产一区二区三区四区在线| 日韩综合在线观看| 亚洲国产黄色片| 在线观看免费视频你懂的| 日本国产欧美一区二区三区| 一区二区三区亚洲变态调教大结局| 日韩精品一区二区三区四区五区| 亚洲国产精品第一区二区| 黄色一级片免费播放| 亚洲国产精品99久久久久久久久| 日干夜干天天干| 日韩一级片网站| 五月婷婷在线观看| 国产成人精品综合| 啪啪国产精品| 国产va亚洲va在线va| 国产精品一品视频| 天天鲁一鲁摸一摸爽一爽| 欧美色倩网站大全免费| 免费福利在线观看| 69av在线播放| 噜噜噜天天躁狠狠躁夜夜精品 | 国产美女一区| 小毛片在线观看| 一区二区激情小说| 国产三级自拍视频| www.日韩.com| www.一区| 亚洲国产成人不卡| 麻豆国产一区二区| 污污视频网站在线免费观看| 在线视频你懂得一区| 欧美老女人性开放| 日本精品性网站在线观看| 香蕉一区二区| 波多野结衣家庭教师视频| 99久久精品情趣| 国产无遮挡又黄又爽又色| 精品国产免费一区二区三区四区 | 激情小视频在线| 青青草一区二区| 自拍偷拍一区| 国产自偷自偷免费一区 | 亚洲不卡1区| 美女久久一区| 小早川怜子久久精品中文字幕| 一本色道久久综合狠狠躁的推荐 | 国产精品一区二区三区在线免费观看| 这里精品视频免费| 国产精品麻豆成人av电影艾秋| 亚洲砖区区免费| 国产乱国产乱300精品| 欧美成人综合色| 精品国产一区二区三区不卡| sm久久捆绑调教精品一区| 美日韩精品免费| 另类综合日韩欧美亚洲| 制服丨自拍丨欧美丨动漫丨| 日韩一级黄色大片| ****av在线网毛片| 日本一区二区免费看| 精品一二三四在线| 久久这里只有精品国产| 日韩av在线网页| 韩日一区二区| 91精品国产吴梦梦| 91看片淫黄大片一级| 日韩xxx视频| 欧美成人剧情片在线观看| 精品久久对白| 浓精h攵女乱爱av| 一区二区三区四区高清精品免费观看 | 亚洲电影天堂av| 欧美与亚洲与日本直播| 伊人久久在线观看| 91麻豆swag| 国产精品熟女久久久久久| 国模私拍一区二区三区| 深爱激情综合网| 亚洲AV无码久久精品国产一区| 亚洲成av人影院| 青青影院在线观看| 国产在线观看一区| 久草这里只有精品视频| 国产精品第56页| 中文字幕亚洲二区| 风间由美一区二区av101| 国产一二三四在线视频| 一区二区三区日韩欧美| 国产精品免费观看| 国产精品国模大尺度私拍| 免费在线一区观看| wwwxxx亚洲| 欧美另类交人妖| 成人三级视频| 久久人人爽人人爽人人片|