国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

鴻蒙開發(fā)系列教程(七)--ArkTS語言:狀態(tài)管理

這篇具有很好參考價值的文章主要介紹了鴻蒙開發(fā)系列教程(七)--ArkTS語言:狀態(tài)管理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

如果希望構(gòu)建一個動態(tài)的、有交互的界面,就需要引入“狀態(tài)”的概念

狀態(tài)管理機制:在聲明式UI編程框架中,UI是程序狀態(tài)的運行結(jié)果,用戶構(gòu)建了一個UI模型,其中應(yīng)用的運行時的狀態(tài)是參數(shù)。當(dāng)參數(shù)改變時,UI作為返回結(jié)果,也將進(jìn)行對應(yīng)的改變。這些運行時的狀態(tài)變化所帶來的UI的重新渲染,在ArkUI中統(tǒng)稱為狀態(tài)管理機制。

自定義組件擁有變量,變量必須被裝飾器裝飾才可以成為狀態(tài)變量,狀態(tài)變量的改變會引起UI的渲染刷新。如果不使用狀態(tài)變量,UI只能在初始化時渲染,后續(xù)將不會再刷新。

鴻蒙開發(fā)系列教程(七)--ArkTS語言:狀態(tài)管理,前端,大數(shù)據(jù),鴻蒙,harmonyos,華為

  • View(UI):UI渲染,指將build方法內(nèi)的UI描述和@Builder裝飾的方法內(nèi)的UI描述映射到界面。

  • State:狀態(tài),指驅(qū)動UI更新的數(shù)據(jù)。用戶通過觸發(fā)組件的事件方法,改變狀態(tài)數(shù)據(jù)。狀態(tài)數(shù)據(jù)的改變,引起UI的重新渲染。

Components級別的狀態(tài)管理

  • @State:@State裝飾的變量擁有其所屬組件的狀態(tài),可以作為其子組件單向和雙向同步的數(shù)據(jù)源。當(dāng)其數(shù)值改變時,會引起相關(guān)組件的渲染刷新。
  • @Prop:@Prop裝飾的變量可以和父組件建立單向同步關(guān)系,@Prop裝飾的變量是可變的,但修改不會同步回父組件。
  • @Link:@Link裝飾的變量和父組件構(gòu)建雙向同步關(guān)系的狀態(tài)變量,父組件會接受來自@Link裝飾的變量的修改的同步,父組件的更新也會同步給@Link裝飾的變量。
  • @Provide/@Consume:@Provide/@Consume裝飾的變量用于跨組件層級(多層組件)同步狀態(tài)變量,可以不需要通過參數(shù)命名機制傳遞,通過alias(別名)或者屬性名綁定。
  • @Observed:@Observed裝飾class,需要觀察多層嵌套場景的class需要被@Observed裝飾。單獨使用@Observed沒有任何作用,需要和@ObjectLink、@Prop連用。
  • @ObjectLink:@ObjectLink裝飾的變量接收@Observed裝飾的class的實例,應(yīng)用于觀察多層嵌套場景,和父組件的數(shù)據(jù)源構(gòu)建雙向同步。

@State裝飾器

組件內(nèi)狀態(tài)

@State是最基礎(chǔ)的,使變量擁有狀態(tài)屬性的裝飾器,它也是大部分狀態(tài)變量的數(shù)據(jù)源

@State裝飾的變量,與聲明式范式中的其他被裝飾變量一樣,是私有的,只能從組件內(nèi)部訪問,在聲明時必須指定其類型和本地初始化。初始化也可選擇使用命名參數(shù)機制從父組件完成初始化。

@State裝飾的變量擁有以下特點:

  • @State裝飾的變量與子組件中的@Prop裝飾變量之間建立單向數(shù)據(jù)同步,與@Link、@ObjectLink裝飾變量之間建立雙向數(shù)據(jù)同步。
  • @State裝飾的變量生命周期與其所屬自定義組件的生命周期相同。

舉例1:

點擊按鈕,數(shù)字跟著變化,如沒有@state,數(shù)字始終為0
鴻蒙開發(fā)系列教程(七)--ArkTS語言:狀態(tài)管理,前端,大數(shù)據(jù),鴻蒙,harmonyos,華為

舉例2:
鴻蒙開發(fā)系列教程(七)--ArkTS語言:狀態(tài)管理,前端,大數(shù)據(jù),鴻蒙,harmonyos,華為

代碼:

class Model {
  public value: string;
  constructor(value: string) {
    this.value = value;
  }
}

@Entry
@Component
struct Index {
  build() {
    Column() {
      MyComponent1({ count: 1, increaseBy: 2 })
      // 調(diào)用Model
      MyComponent1({ title: new Model('測試2'), count: 5 })
    }
  }
}

@Component
struct MyComponent1 {
  @State title: Model = new Model('測試1');
  @State count: number = 0;
  private increaseBy: number = 1;

  build() {
    Column() {
      Text(`${this.title.value}`)
      Button(`改變標(biāo)題`).onClick(() => {
        this.title.value = this.title.value === 'aaa' ? 'bbb' : 'aaa';
      })

      Button(`增加=${this.count}`).onClick(() => {
        this.count += this.increaseBy;
      })
    }
  }
}

@Link裝飾器

父子雙向同步

子組件中被@Link裝飾的變量與其父組件中對應(yīng)的數(shù)據(jù)源建立雙向數(shù)據(jù)綁定

@Link裝飾的變量與其父組件中的數(shù)據(jù)源共享相同的值。

@Link裝飾器不能在@Entry裝飾的自定義組件中使用。

舉例1:
鴻蒙開發(fā)系列教程(七)--ArkTS語言:狀態(tài)管理,前端,大數(shù)據(jù),鴻蒙,harmonyos,華為

代碼:

class GreenButtonState {
  width: number = 0;

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

@Component
struct GreenButton {
  @Link greenButtonState: GreenButtonState;

  build() {
    Button('Green Button')
      .width(this.greenButtonState.width)
      .height(40)
      .backgroundColor('#64bb5c')
      .fontColor('#FFFFFF,90%')
      .onClick(() => {
        if (this.greenButtonState.width < 700) {
          // 更新class的屬性,變化可以被觀察到同步回父組件
          this.greenButtonState.width += 60;
        } else {
          // 更新class,變化可以被觀察到同步回父組件
          this.greenButtonState = new GreenButtonState(180);
        }
      })
  }
}

@Component
struct YellowButton {
  @Link yellowButtonState: number;

  build() {
    Button('Yellow Button')
      .width(this.yellowButtonState)
      .height(40)
      .backgroundColor('#f7ce00')
      .fontColor('#FFFFFF,90%')
      .onClick(() => {
        // 子組件的簡單類型可以同步回父組件
        this.yellowButtonState += 40.0;
      })
  }
}

@Entry
@Component
struct ShufflingContainer {
  @State greenButtonState: GreenButtonState = new GreenButtonState(180);
  @State yellowButtonProp: number = 180;

  build() {
    Column() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center }) {
        // 簡單類型從父組件@State向子組件@Link數(shù)據(jù)同步
        Button('Parent View: Set yellowButton')
          .width(312)
          .height(40)
          .margin(12)
          .fontColor('#FFFFFF,90%')
          .onClick(() => {
            this.yellowButtonProp = (this.yellowButtonProp < 700) ? this.yellowButtonProp + 40 : 100;
          })
        // class類型從父組件@State向子組件@Link數(shù)據(jù)同步
        Button('Parent View: Set GreenButton')
          .width(312)
          .height(40)
          .margin(12)
          .fontColor('#FFFFFF,90%')
          .onClick(() => {
            this.greenButtonState.width = (this.greenButtonState.width < 700) ? this.greenButtonState.width + 100 : 100;
          })
        // class類型初始化@Link
        GreenButton({ greenButtonState: $greenButtonState }).margin(12)
        // 簡單類型初始化@Link
        YellowButton({ yellowButtonState: $yellowButtonProp }).margin(12)
      }
    }
  }
}

以上內(nèi)容參考“官方文檔”文章來源地址http://www.zghlxwxcb.cn/news/detail-807603.html

到了這里,關(guān)于鴻蒙開發(fā)系列教程(七)--ArkTS語言:狀態(tài)管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【鴻蒙應(yīng)用ArkTS開發(fā)系列】- 選擇圖片、文件和拍照功能實現(xiàn)

    【鴻蒙應(yīng)用ArkTS開發(fā)系列】- 選擇圖片、文件和拍照功能實現(xiàn)

    在使用App的時候,我們經(jīng)常會在一些社交軟件中聊天時發(fā)一些圖片或者文件之類的多媒體文件,那在鴻蒙原生應(yīng)用中,我們怎么開發(fā)這樣的功能呢? 本文會給大家對這個功能點進(jìn)行講解,我們采用的是拉起系統(tǒng)組件來進(jìn)行圖片、文件的選擇,拉起系統(tǒng)相機進(jìn)行拍照的這樣一種

    2024年02月04日
    瀏覽(23)
  • 【鴻蒙應(yīng)用ArkTS開發(fā)系列】- 導(dǎo)航欄Tab組件使用講解

    【鴻蒙應(yīng)用ArkTS開發(fā)系列】- 導(dǎo)航欄Tab組件使用講解

    現(xiàn)在市場上的大部分應(yīng)用,主頁都是才用底部導(dǎo)航欄菜單作為頁面主體框架來展示, 在鴻蒙中是使用Tabs組件實現(xiàn),下面我們開始講解Tab組件的使用。 Tabs是一個通過頁簽進(jìn)行內(nèi)容視圖切換的容器組件,每個頁簽對應(yīng)一個內(nèi)容視圖,它僅可包含子組件TabContent,同時搭配 TabsCo

    2024年01月16日
    瀏覽(38)
  • 【鴻蒙4.0】詳解harmonyos開發(fā)語言ArkTS

    【鴻蒙4.0】詳解harmonyos開發(fā)語言ArkTS

    如官方文檔所描述,ArkTS是基于Javascript以及Typescript的生態(tài)上做了進(jìn)一步的擴展,進(jìn)一步的提高開發(fā)效率,使用過低代碼開發(fā)的老師應(yīng)該會有一種感覺ArkTS像低代碼一樣更簡潔,幾行代碼就能實現(xiàn)一個功能。以開發(fā)者的角度肯定是越簡潔越好。下面來淺淺的了解一下js,ts以及

    2024年01月22日
    瀏覽(48)
  • 【鴻蒙應(yīng)用ArkTS開發(fā)系列】- http網(wǎng)絡(luò)庫使用講解和封裝

    【鴻蒙應(yīng)用ArkTS開發(fā)系列】- http網(wǎng)絡(luò)庫使用講解和封裝

    現(xiàn)在網(wǎng)上的應(yīng)用,基本都是網(wǎng)絡(luò)應(yīng)用,需要進(jìn)行聯(lián)網(wǎng)獲取數(shù)據(jù),而常用的聯(lián)網(wǎng)獲取數(shù)據(jù)的方式有http、socket、websocket等。 在鴻蒙應(yīng)用、服務(wù)中,stage模式開發(fā)下,鴻蒙官方為我們提供了一個網(wǎng)絡(luò)組件庫 http ,我們通過 import http from ‘@ohos.net.http’; 即可以完成引用。 @ohos.net.http

    2024年02月15日
    瀏覽(29)
  • 鴻蒙開發(fā):深入了解Arkts語言中的Want對象及其運用【鴻蒙專欄-23】

    Arkts語言中的 Want 是一種用于對象間信息傳遞的載體,主要用于應(yīng)用組件之間的信息傳遞。本文將深入探討 Want 的定義、用途、類型以及參數(shù)說明

    2024年02月05日
    瀏覽(23)
  • 【鴻蒙應(yīng)用ArkTS開發(fā)系列】- Har包中子組件中監(jiān)聽生命周期實現(xiàn)

    在鴻蒙應(yīng)用開發(fā)中,有時候我們會創(chuàng)建HAR 模塊封裝一些SDK能力提供給第三方APP進(jìn)行集成。 鴻蒙的har 包并不支持定義page頁面對外導(dǎo)出,也不支持配置路由信息,因此我們多是在har包中提供組件,通過導(dǎo)出組件的形式,提供給App引用使用。 在鴻蒙中,非@Entry裝飾的組件,只能

    2024年02月14日
    瀏覽(21)
  • 【鴻蒙開發(fā)】第七章 ArkTS語言UI范式-基礎(chǔ)語法

    【鴻蒙開發(fā)】第七章 ArkTS語言UI范式-基礎(chǔ)語法

    通過前面的章節(jié),我們基本清楚鴻蒙應(yīng)用開發(fā)用到的語言和項目基本結(jié)構(gòu),在【鴻蒙開發(fā)】第四章 Stage應(yīng)用模型及項目結(jié)構(gòu)也提到過ArkTS的UI范式的 基本語法 、 狀態(tài)管理 、 渲染控制 等能力,簡要介紹如下: 基本語法 : ArkTS 定義了 聲明式UI描述 、 自定義組件 和 動態(tài)擴展

    2024年02月03日
    瀏覽(24)
  • 鴻蒙開發(fā):深入了解Arkts語言中的Want對象及其運用

    Arkts語言中的 Want 是一種用于對象間信息傳遞的載體,主要用于應(yīng)用組件之間的信息傳遞。本文將深入探討 Want 的定義、用途、類型以及參數(shù)說明

    2024年02月04日
    瀏覽(23)
  • 鴻蒙開發(fā)之狀態(tài)管理

    鴻蒙開發(fā)之狀態(tài)管理

    @State裝飾的變量,會和自定義組件的渲染綁定起來。當(dāng)狀態(tài)改變時,UI會發(fā)生對應(yīng)的渲染改變。 在狀態(tài)變量相關(guān)裝飾器中,@State是最基礎(chǔ)的,使變量擁有狀態(tài)屬性的裝飾器,它也是大部分狀態(tài)變量的數(shù)據(jù)源。 裝飾器使用規(guī)則 同步類型:不與父組件中任何類型的變量同步。 允

    2024年01月20日
    瀏覽(43)
  • 身份證閱讀器和社??ㄗx卡器Harmony鴻蒙系統(tǒng)ArkTS語言SDK開發(fā)包

    身份證閱讀器和社??ㄗx卡器Harmony鴻蒙系統(tǒng)ArkTS語言SDK開發(fā)包

    項目需求,用ArkTS新一代開發(fā)語言實現(xiàn)了在Harmony鴻蒙系統(tǒng)上面兼容身份證閱讀器和社??ㄗx卡器,調(diào)用了DonseeDeviceLib.har這個讀卡庫。 需要注意的是,鴻蒙系統(tǒng)的app擴展名為.hap,本項目編譯輸出的應(yīng)用為:entry-default-signed.hap 下面是調(diào)用身份證閱讀器讀取身份證信息的接口,支

    2024年02月03日
    瀏覽(44)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包