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

鴻蒙Harmony--狀態(tài)管理器--@Prop詳解

這篇具有很好參考價(jià)值的文章主要介紹了鴻蒙Harmony--狀態(tài)管理器--@Prop詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

縱橫千里獨(dú)行客,何懼前路雨瀟瀟。夜半濁酒慰寂寞,天明走馬入紅塵。且將新火試新茶,詩(shī)酒趁年華。青春以末,壯志照舊,生活以悟,前路未明。時(shí)間善變,可執(zhí)著翻不了篇。時(shí)光磨我少年心,卻難滅我少年志,壯士活古不活皮。加油。

程序員必備的面試技巧

目錄

一,定義

二,裝飾器使用規(guī)則說明

三,變量的傳遞/訪問規(guī)則說明

?四,使用

1,簡(jiǎn)單使用

2,裝飾復(fù)雜類型

3,@State和@Prop的同步場(chǎng)景

?4,父組件@State到子組件@Prop簡(jiǎn)單數(shù)據(jù)類型同步

5,父組件@State到子組件@Prop復(fù)雜數(shù)據(jù)類型同步

注意事項(xiàng)

一,定義

@Prop裝飾的變量可以和父組件建立單向的同步關(guān)系。@Prop裝飾的變量是可變的,但是變化不會(huì)同步回其父組件。

@Prop裝飾的變量和父組件建立單向的同步關(guān)系:

①@Prop變量允許在本地修改,但修改后的變化不會(huì)同步回父組件。

②當(dāng)數(shù)據(jù)源更改時(shí),@Prop裝飾的變量都會(huì)更新,并且會(huì)覆蓋本地所有更改。因此,數(shù)值的同步是父組件到子組件(所屬組件),子組件數(shù)值的變化不會(huì)同步到父組件。

!注意:

①@Prop修飾復(fù)雜類型時(shí)是深拷貝,在拷貝的過程中除了基本類型、Map、Set、Date、Array外,都會(huì)丟失類型。

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

二,裝飾器使用規(guī)則說明

@Prop變量裝飾器 說明
裝飾器參數(shù)
同步類型 單向同步:對(duì)父組件狀態(tài)變量值的修改,將同步給子組件@Prop裝飾的變量,子組件@Prop變量的修改不會(huì)同步到父組件的狀態(tài)變量上。
允許裝飾的變量類型 Object、class、string、number、boolean、enum類型,以及這些類型的數(shù)組。
不支持any,不支持簡(jiǎn)單類型和復(fù)雜類型的聯(lián)合類型,不允許使用undefined和null。
支持Date類型。
必須指定類型。
說明?:
不支持Length、ResourceStr、ResourceColor類型,Length,ResourceStr、ResourceColor為簡(jiǎn)單類型和復(fù)雜類型的聯(lián)合類型。
在父組件中,傳遞給@Prop裝飾的值不能為undefined或者null,反例如下所示。
CompA?({?aProp:?undefined?})
CompA?({?aProp:?null?})
@Prop和數(shù)據(jù)源類型需要相同,有以下三種情況:
-?@Prop裝飾的變量和@State以及其他裝飾器同步時(shí)雙方的類型必須相同
-?@Prop裝飾的變量和@State以及其他裝飾器裝飾的數(shù)組的項(xiàng)同步時(shí) ,@Prop的類型需要和@State裝飾的數(shù)組的數(shù)組項(xiàng)相同,比如@Prop?:?T和@State?:?Array<T>
-?當(dāng)父組件狀態(tài)變量為Object或者class時(shí),@Prop裝飾的變量和父組件狀態(tài)變量的屬性類型相同
嵌套傳遞層數(shù) 在組件復(fù)用場(chǎng)景,建議@Prop深度嵌套數(shù)據(jù)不要超過5層,嵌套太多會(huì)導(dǎo)致深拷貝占用的空間過大以及GarbageCollection(垃圾回收),引起性能問題,此時(shí)更建議使用@ObjectLink。
被裝飾變量的初始值 允許本地初始化。

?

三,變量的傳遞/訪問規(guī)則說明

傳遞/訪問 說明
從父組件初始化 如果本地有初始化,則是可選的。沒有的話,則必選,支持父組件中的常規(guī)變量(常規(guī)變量對(duì)@Prop賦值,只是數(shù)值的初始化,常規(guī)變量的變化不會(huì)觸發(fā)UI刷新。只有狀態(tài)變量才能觸發(fā)UI刷新)、@State、@Link、@Prop、@Provide、@Consume、@ObjectLink、@StorageLink、@StorageProp、@LocalStorageLink和@LocalStorageProp去初始化子組件中的@Prop變量。
用于初始化子組件 @Prop支持去初始化子組件中的常規(guī)變量、@State、@Link、@Prop、@Provide。
是否支持組件外訪問 @Prop裝飾的變量是私有的,只能在組件內(nèi)訪問。

?四,使用

1,簡(jiǎn)單使用

創(chuàng)建組件,只能在組件中使用

@Component
export default struct PropTest {
  @Prop yuanZhen:string ="222"

  build() {
    Row() {
      Column() {
        Text("name:" + this.yuanZhen)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            this.yuanZhen = "888"
          })
      }.width('100%')
    }.height('100%')
  }
}

引用組件:

import PropTest from './PropTest';

@Entry
@Component
struct Index {

  build() {
    Column(){
      PropTest()
    }
  }
}

運(yùn)行:

鴻蒙Harmony--狀態(tài)管理器--@Prop詳解,鴻蒙開發(fā),鴻蒙,harmony,Harmony點(diǎn)擊鴻蒙Harmony--狀態(tài)管理器--@Prop詳解,鴻蒙開發(fā),鴻蒙,harmony,Harmony

2,裝飾復(fù)雜類型

創(chuàng)建兩個(gè)類:

export default class YuanZhen {

  public name: string = 'YuanZhen';

  public age: number = 18;

  constructor(name: string, age: number) {
    this.name = name
    this.age = age
  }
}
import YuanZhen from './YuanZhen';

export default class Yuan {

  public number: number = 1;
  public yuanZhen: YuanZhen = new YuanZhen('yuanzhen', 18);

  constructor(number: number, yuanZhen: YuanZhen) {
    this.number = number
    this.yuanZhen = yuanZhen
  }
}

?在組件中應(yīng)用:

import Yuan from './bean/Yuan'

@Component
export default struct PropTest {
  @Prop yuanZhen:Yuan

  build() {
    Row() {
      Column() {
        Text("name:" + this.yuanZhen.yuanZhen.name+"\nage:"+this.yuanZhen.yuanZhen.age+"\nnumber:"+this.yuanZhen.number)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            this.yuanZhen.number=26
            this.yuanZhen.yuanZhen.age=30
            this.yuanZhen.yuanZhen.name="袁世震"
          })
      }.width('100%')
    }.height('100%')
  }
}

傳值給組件:

import Yuan from './bean/Yuan';
import YuanZhen from './bean/YuanZhen';
import PropTest from './PropTest';

@Entry
@Component
struct Index {

  build() {
    Column(){
      PropTest({yuanZhen:new Yuan(1,new YuanZhen("袁震",22))})
    }
  }
}

結(jié)果:

鴻蒙Harmony--狀態(tài)管理器--@Prop詳解,鴻蒙開發(fā),鴻蒙,harmony,Harmony點(diǎn)擊后鴻蒙Harmony--狀態(tài)管理器--@Prop詳解,鴻蒙開發(fā),鴻蒙,harmony,Harmony

所以,當(dāng)裝飾的類型是Object或者class復(fù)雜類型時(shí),可以觀察到所有的屬性的變化

?

3,@State和@Prop的同步場(chǎng)景

①使用父組件中@State變量的值初始化子組件中的@Prop變量。當(dāng)@State變量變化時(shí),該變量值也會(huì)同步更新至@Prop變量。

②@Prop裝飾的變量的修改不會(huì)影響其數(shù)據(jù)源@State裝飾變量的值。

③除了@State,數(shù)據(jù)源也可以用@Link或@Prop裝飾,對(duì)@Prop的同步機(jī)制是相同的。

④數(shù)據(jù)源和@Prop變量的類型需要相同,@Prop允許簡(jiǎn)單類型和class類型。

!注意:

  1. 初始渲染:

    1. 執(zhí)行父組件的build()函數(shù)將創(chuàng)建子組件的新實(shí)例,將數(shù)據(jù)源傳遞給子組件;
    2. 初始化子組件@Prop裝飾的變量。
  2. 更新:

    1. 子組件@Prop更新時(shí),更新僅停留在當(dāng)前子組件,不會(huì)同步回父組件;
    2. 當(dāng)父組件的數(shù)據(jù)源更新時(shí),子組件的@Prop裝飾的變量將被來自父組件的數(shù)據(jù)源重置,所有@Prop裝飾的本地的修改將被父組件的更新覆蓋。

?4,父組件@State到子組件@Prop簡(jiǎn)單數(shù)據(jù)類型同步

在父組件定義一個(gè)變量a,并傳遞到子組件

import PropTest from './PropTest';

@Entry
@Component
struct Index {

  @State a:number=2

  build() {
    Column(){
      Text("a="+this.a)
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .onClick(() => {
           this.a =66
        })
      PropTest({a:this.a})
    }
  }
}
@Component
export default struct PropTest {
  @Prop a:number

  build() {
    Row() {
      Column() {
        Text("a:" +this.a)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            this.a =888
          })
      }.width('100%')
    }.height('100%')
  }
}

運(yùn)行:

鴻蒙Harmony--狀態(tài)管理器--@Prop詳解,鴻蒙開發(fā),鴻蒙,harmony,Harmony

當(dāng)點(diǎn)擊上面的a=2時(shí),運(yùn)行結(jié)果

鴻蒙Harmony--狀態(tài)管理器--@Prop詳解,鴻蒙開發(fā),鴻蒙,harmony,Harmony

當(dāng)點(diǎn)擊a:66時(shí),運(yùn)行結(jié)果:

鴻蒙Harmony--狀態(tài)管理器--@Prop詳解,鴻蒙開發(fā),鴻蒙,harmony,Harmony

所以:當(dāng)父組件的數(shù)據(jù)源更新時(shí),子組件的@Prop裝飾的變量將被來自父組件的數(shù)據(jù)源重置,所有@Prop裝飾的本地的修改將被父組件的更新覆蓋,當(dāng)子組件@Prop更新時(shí),更新僅停留在當(dāng)前子組件,不會(huì)同步回父組件

5,父組件@State到子組件@Prop復(fù)雜數(shù)據(jù)類型同步

父組件:

import Yuan from './bean/Yuan';
import YuanZhen from './bean/YuanZhen';
import PropTest from './PropTest';

@Entry
@Component
struct Index {

  @State yuan:Yuan=new Yuan(2,new YuanZhen("袁震",18))

  build() {
    Column(){
      Text("name:" + this.yuan.yuanZhen.name+"\nage:"+this.yuan.yuanZhen.age+"\nnumber:"+this.yuan.number)
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .onClick(() => {
          this.yuan.number=1
          this.yuan.yuanZhen.age=32
          this.yuan.yuanZhen.name="袁震1"
        })
      PropTest({yuan:this.yuan})
    }
  }
}

子組件:

import Yuan from './bean/Yuan'

@Component
export default struct PropTest {
  @Prop yuan:Yuan


  build() {
    Row() {
      Column() {
        Text("name:" + this.yuan.yuanZhen.name+"\nage:"+this.yuan.yuanZhen.age+"\nnumber:"+this.yuan.number)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            this.yuan.number=26
            this.yuan.yuanZhen.age=30
            this.yuan.yuanZhen.name="袁世震"
          })
      }.width('100%')
    }.height('100%')
  }
}

運(yùn)行:

鴻蒙Harmony--狀態(tài)管理器--@Prop詳解,鴻蒙開發(fā),鴻蒙,harmony,Harmony

點(diǎn)擊上面的text:

鴻蒙Harmony--狀態(tài)管理器--@Prop詳解,鴻蒙開發(fā),鴻蒙,harmony,Harmony

點(diǎn)擊下面的text:

鴻蒙Harmony--狀態(tài)管理器--@Prop詳解,鴻蒙開發(fā),鴻蒙,harmony,Harmony

注意事項(xiàng)

@Prop需要被初始化,如果沒有進(jìn)行本地初始化的,則必須通過父組件進(jìn)行初始化。如果進(jìn)行了本地初始化,那么是可以不通過父組件進(jìn)行初始化的。文章來源地址http://www.zghlxwxcb.cn/news/detail-788874.html

到了這里,關(guān)于鴻蒙Harmony--狀態(tài)管理器--@Prop詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 鴻蒙Harmony-PersistentStorage--持久化存儲(chǔ)UI狀態(tài)儲(chǔ)詳解

    鴻蒙Harmony-PersistentStorage--持久化存儲(chǔ)UI狀態(tài)儲(chǔ)詳解

    用簡(jiǎn)單的心境,對(duì)待復(fù)雜的人生,方能看淡得失,從容入世,瀟灑自如,心變得簡(jiǎn)單了,世界也就簡(jiǎn)單了 目錄 一,定義 二,限制條件 三,使用 LocalStorage和AppStorage都是運(yùn)行時(shí)的內(nèi)存,但是在應(yīng)用退出再次啟動(dòng)后,依然能保存選定的結(jié)果,是應(yīng)用開發(fā)中十分常見的現(xiàn)象,這就

    2024年01月18日
    瀏覽(18)
  • 鴻蒙:Harmony開發(fā)基礎(chǔ)知識(shí)詳解

    鴻蒙:Harmony開發(fā)基礎(chǔ)知識(shí)詳解

    工欲善其事,必先利其器。 上一篇博文實(shí)現(xiàn)了一個(gè) \\\"Hello Harmony\\\" 的Demo,今天這篇博文就以 \\\"Hello Harmony\\\"? 為例,以官網(wǎng)開發(fā)文檔為依據(jù),從鴻蒙開發(fā)主要的幾個(gè)方面入手,詳細(xì)了解一下鴻蒙開發(fā)所需的基礎(chǔ)知識(shí)。 HarmonyOS提供了一套UI開發(fā)框架,即 方舟開發(fā)框架 ( ArkUI框架 )

    2024年02月05日
    瀏覽(65)
  • 鴻蒙Harmony-頁(yè)面路由(router)詳解

    鴻蒙Harmony-頁(yè)面路由(router)詳解

    慢慢理解世界,慢慢更新自己,希望你的每一個(gè)昨天,今天,和明天都會(huì)很快樂,你知道的,先好起來的從來都不是生活,而是你自己? 目錄 一,定義 二,頁(yè)面跳轉(zhuǎn) 2.1使用router.pushUrl 2.2 使用router.replaceUrl 2.3 使用Single模式 2.4 帶參數(shù)的跳轉(zhuǎn) ?三,頁(yè)面返回 ?3.1返回到上一個(gè)頁(yè)

    2024年01月20日
    瀏覽(25)
  • 鴻蒙Harmony-相對(duì)布局(RelativeContainer)詳解

    鴻蒙Harmony-相對(duì)布局(RelativeContainer)詳解

    成年人的世界,從來沒有容易二字,想要什么,就得憑自己的努力去拿,遇到事情就得自己生生的硬抗,希望你即使再辛苦,但還是會(huì)選擇這滾燙的人生,加油陌生的朋友們 目錄 一,定義 二,設(shè)置依賴關(guān)系 2.1?錨點(diǎn)設(shè)置 2.2?設(shè)置相對(duì)于錨點(diǎn)的對(duì)齊位置 RelativeContainer為采用相

    2024年02月01日
    瀏覽(28)
  • 鴻蒙Harmony-層疊布局(Stack)詳解

    鴻蒙Harmony-層疊布局(Stack)詳解

    我們總是為了太多遙不可及的東西去拼命,卻忘了人生真正的幸福不過是燈火闌珊處的溫暖,柴米油鹽的充實(shí),人生無論你賺的錢,是多還是少,經(jīng)歷的事情是好還是壞,都不如過好當(dāng)下的每一天!? 目錄 一,定義 二,開發(fā)布局 三,對(duì)齊方式 3.1?TopStart頂部起始端? 3.2?To

    2024年01月18日
    瀏覽(20)
  • 鴻蒙Harmony-列表組件(List)詳解

    鴻蒙Harmony-列表組件(List)詳解

    不要和別人比生活,每個(gè)人階段不同,追求不同,活法自然也不同。只要今天的你能比昨天的你快樂一點(diǎn)點(diǎn),那你就是自己人生贏家。 目錄 一,定義 二,布局與約束 2.1 布局 2.2 約束 三,開發(fā)布局 3.1?設(shè)置主軸方向 3.2設(shè)置交叉軸布局 四,迭代列表內(nèi)容 五,自定義列表樣式

    2024年01月17日
    瀏覽(20)
  • Harmony鴻蒙南向驅(qū)動(dòng)開發(fā)流程

    Harmony鴻蒙南向驅(qū)動(dòng)開發(fā)流程

    HDF(Hardware Driver Foundation)驅(qū)動(dòng)框架,為驅(qū)動(dòng)開發(fā)者提供驅(qū)動(dòng)框架能力,包括驅(qū)動(dòng)加載、驅(qū)動(dòng)服務(wù)管理、驅(qū)動(dòng)消息機(jī)制和配置管理。并以組件化驅(qū)動(dòng)模型作為核心設(shè)計(jì)思路,讓驅(qū)動(dòng)開發(fā)和部署更加規(guī)范,旨在構(gòu)建統(tǒng)一的驅(qū)動(dòng)架構(gòu)平臺(tái),為驅(qū)動(dòng)開發(fā)者提供更精準(zhǔn)、更高效的驅(qū)動(dòng)

    2024年04月27日
    瀏覽(25)
  • 鴻蒙harmony--數(shù)據(jù)庫(kù)sqlite詳解

    鴻蒙harmony--數(shù)據(jù)庫(kù)sqlite詳解

    今天是1月20號(hào)星期六,早安,歲末大寒至,靜后春歸來。愿他鄉(xiāng)故人,漂泊有歸宿,前程有奔赴,愿人間不寒,溫暖常伴,諸事順利,喜樂長(zhǎng)安。? 目錄 一,定義 二,運(yùn)作機(jī)制 三,約束限制 四,接口說明 五,開發(fā)步驟 5.1 獲取數(shù)據(jù)庫(kù) 5.2 創(chuàng)建數(shù)據(jù)庫(kù)表 5.3 數(shù)據(jù)庫(kù)升降級(jí) 5.4插

    2024年01月21日
    瀏覽(19)
  • 鴻蒙Harmony-線性布局(Row/Column)詳解

    鴻蒙Harmony-線性布局(Row/Column)詳解

    人生的下半場(chǎng),做個(gè)簡(jiǎn)單的人,少與人糾纏,多看大自然,在路上見世界,在途中尋自己。往后余生唯愿開心健康,至于其他,隨緣就好!? 目錄 一,定義 二,基本概念 三,布局子元素在排列方向上的間距 四,布局子元素在交叉軸上的對(duì)齊方式 4.1 Column容器內(nèi)子元素在水平

    2024年02月01日
    瀏覽(26)
  • 鴻蒙Harmony開發(fā)學(xué)習(xí)(一)運(yùn)行helloworld

    鴻蒙Harmony開發(fā)學(xué)習(xí)(一)運(yùn)行helloworld

    HarmonyOS與OpenHarmony (1)本質(zhì)上的不同是:HarmonyOS是鴻蒙操作系統(tǒng),而OpenHarmony則是從開源項(xiàng)目。這里可以聯(lián)想一下Android,比如小米手機(jī)在Android開源系統(tǒng)的基礎(chǔ)上開發(fā)了MIUI的手機(jī)操作系統(tǒng),HarmonyOS就類似于MIUI,OpenHarmony類似Android基礎(chǔ)底座。 (2)HarmonyOS:是雙框架,內(nèi)聚了AO

    2024年02月01日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包