99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

OpenHarmony頁面級變量的狀態(tài)管理

ArkUI詳解 ? 來源:ArkUI詳解 ? 作者:ArkUI詳解 ? 2022-12-07 08:58 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

狀態(tài)管理

@State、@Prop、@Link、@Provide、Consume、@ObjectLink、@Observed和@Watch用于管理頁面級變量的狀態(tài)。

裝飾器 裝飾內(nèi)容 說明
@State 基本數(shù)據(jù)類型,類,數(shù)組 修飾的狀態(tài)數(shù)據(jù)被修改時會觸發(fā)組件的build方法進行UI界面更新。
@Prop 基本數(shù)據(jù)類型 修改后的狀態(tài)數(shù)據(jù)用于在父組件和子組件之間建立單向數(shù)據(jù)依賴關(guān)系。修改父組件關(guān)聯(lián)數(shù)據(jù)時,當前組件會重新渲染。
@Link 基本數(shù)據(jù)類型,類,數(shù)組 父子組件之間的雙向數(shù)據(jù)綁定,父組件的內(nèi)部狀態(tài)數(shù)據(jù)作為數(shù)據(jù)源,任何一方所做的修改都會反映給另一方。
@Observed @Observed應(yīng)用于類,表示該類中的數(shù)據(jù)變更被UI頁面管理。
@ObjectLink 被@Observed所裝飾類的對象 @ObjectLink裝飾的狀態(tài)數(shù)據(jù)被修改時,在父組件或者其他兄弟組件內(nèi)與它關(guān)聯(lián)的狀態(tài)數(shù)據(jù)所在的組件都會重新渲染。
@Consume 基本數(shù)據(jù)類型,類,數(shù)組 @Consume裝飾的變量在感知到@Provide裝飾的變量更新后,會觸發(fā)當前自定義組件的重新渲染。
@Provide 基本數(shù)據(jù)類型,類,數(shù)組 @Provide作為數(shù)據(jù)的提供方,可以更新其子孫節(jié)點的數(shù)據(jù),并觸發(fā)頁面重新渲染。

@State

@State裝飾的變量是組件內(nèi)部的狀態(tài)數(shù)據(jù),當這些狀態(tài)數(shù)據(jù)被修改時,將會調(diào)用所在組件的build方法進行UI刷新。

@State狀態(tài)數(shù)據(jù)具有以下特征:

支持多種類型數(shù)據(jù):支持class、number、boolean、string強類型數(shù)據(jù)的值類型和引用類型,以及這些強類型構(gòu)成的數(shù)組,即Array、Array、Array、Array。不支持object和any。

支持多實例:組件不同實例的內(nèi)部狀態(tài)數(shù)據(jù)獨立。

內(nèi)部私有:標記為@State的屬性是私有變量,只能在組件內(nèi)訪問。

需要本地初始化:必須為所有@State變量分配初始值,變量未初始化可能導(dǎo)致未定義的框架異常行為。

創(chuàng)建自定義組件時支持通過狀態(tài)變量名設(shè)置初始值:在創(chuàng)建組件實例時,可以通過變量名顯式指定@State狀態(tài)變量的初始值。

@Prop

@Prop與@State有相同的語義,但初始化方式不同。@Prop裝飾的變量必須使用其父組件提供的@State變量進行初始化,允許組件內(nèi)部修改@Prop變量,但變量的更改不會通知給父組件,即@Prop屬于單向數(shù)據(jù)綁定。

@Prop狀態(tài)數(shù)據(jù)具有以下特征:

支持簡單類型:僅支持number、string、boolean等簡單數(shù)據(jù)類型;

私有:僅支持組件內(nèi)訪問;

支持多個實例:一個組件中可以定義多個標有@Prop的屬性;

創(chuàng)建自定義組件時將值傳遞給@Prop變量進行初始化:在創(chuàng)建組件的新實例時,必須初始化所有@Prop變量,不支持在組件內(nèi)部進行初始化

@Link

@Link裝飾的變量可以和父組件的@State變量建立雙向數(shù)據(jù)綁定:

支持多種類型:@Link支持的數(shù)據(jù)類型與@State相同,即class、number、string、boolean或這些類型的數(shù)組;

私有:僅支持組件內(nèi)訪問;

單個數(shù)據(jù)源:父組件中用于初始化子組件@Link變量的必須是@State變量;

雙向通信:子組件對@Link變量的更改將同步修改父組件中的@State變量;

創(chuàng)建自定義組件時需要將變量的引用傳遞給@Link變量,在創(chuàng)建組件的新實例時,必須使用命名參數(shù)初始化所有@Link變量。@Link變量可以使用@State變量或@Link變量的引用進行初始化,@State變量可以通過'$'操作符創(chuàng)建引用。

@Observed和ObjectLink數(shù)據(jù)管理

開發(fā)者只想針對父組件中某個數(shù)據(jù)對象的部分信息進行同步時,如果這些部分信息是一個類對象,就可以使用@ObjectLink配合@Observed來實現(xiàn),如下圖所示。

@Observed用于類,@ObjectLink用于變量。

@ObjectLink裝飾的變量類型必須為類(class type)。

類要被@Observed裝飾器所裝飾。

不支持簡單類型參數(shù),可以使用@Prop進行單向同步。

@ObjectLink裝飾的變量是不可變的。

屬性的改動是被允許的,當改動發(fā)生時,如果同一個對象被多個@ObjectLink變量所引用,那么所有擁有這些變量的自定義組件都會被通知進行重新渲染。

@ObjectLink裝飾的變量不可設(shè)置默認值。

必須讓父組件中有一個由@State、@Link、@StorageLink、@Provide或@Consume裝飾的變量所參與的TS表達式進行初始化。

@ObjectLink裝飾的變量是私有變量,只能在組件內(nèi)訪問

@Consume和@Provide

@Provide作為數(shù)據(jù)的提供方,可以更新其子孫節(jié)點的數(shù)據(jù),并觸發(fā)頁面渲染。@Consume在感知到@Provide數(shù)據(jù)的更新后,會觸發(fā)當前自定義組件的重新渲染。

@Provide

名稱 說明
裝飾器參數(shù) 是一個string類型的常量,用于給裝飾的變量起別名。如果規(guī)定別名,則提供對應(yīng)別名的數(shù)據(jù)更新。如果沒有,則使用變量名作為別名。推薦使用@Provide('alias')這種形式。
同步機制 @Provide的變量類似@State,可以修改對應(yīng)變量進行頁面重新渲染。也可以修改@Consume裝飾的變量,反向修改@State變量。
初始值 必須設(shè)置初始值。
頁面重渲染場景 觸發(fā)頁面渲染的修改:- 基礎(chǔ)類型(boolean,string,number)變量的改變;- @Observed class類型變量及其屬性的修改;- 添加,刪除,更新數(shù)組中的元素。

@Consume

類型 說明
初始值 不可設(shè)置默認初始值。

@Watch

@Watch用于監(jiān)聽狀態(tài)變量的變化

具體允許哪種方式取決于狀態(tài)變量的裝飾器:

裝飾器類型 本地初始化 通過構(gòu)造函數(shù)參數(shù)初始化
@State 必須 可選
@Prop 禁止 必須
@Link 禁止 必須
@StorageLink 必須 禁止
@StorageProp 必須 禁止
@Provide 必須 可選
@Consume 禁止 禁止
@ObjectLink 禁止 必須
常規(guī)成員變量 推薦 可選

從上表中可以看出:

@State變量需要本地初始化,初始化的值可以被構(gòu)造參數(shù)覆蓋。

@Prop和@Link變量必須且僅通過構(gòu)造函數(shù)參數(shù)進行初始化。

通過構(gòu)造函數(shù)方法初始化成員變量,需要遵循如下規(guī)則:

從父組件中的變量(下)到子組件中的變量(右) @State @Link @Prop 常規(guī)變量
@State 不允許 允許 允許 允許
@Link 不允許 允許 不推薦 允許
@Prop 不允許 不允許 允許 允許
@StorageLink 不允許 允許 不允許 允許
@StorageProp 不允許 不允許 不允許 允許
常規(guī)變量 允許 不允許 不允許 允許

從上表中可以看出:

父組件的常規(guī)變量可以用于初始化子組件的@State變量,但不能用于初始化@Link或@Prop變量。

父組件的@State變量可以初始化子組件的@Prop、@Link(通過$)或常規(guī)變量,但不能初始化子組件的@State變量。

父組件的@Link變量可以初始化子組件的@Link或常規(guī)變量。但是初始化子組件的@State成員是語法錯誤,此外不建議初始化@Prop。

父組件的@Prop變量可以初始化子組件的常規(guī)變量或@Prop變量,但不能初始化子組件的@State或@Link變量。

@StorageLink和@StorageProp不允許由父組件中傳遞到子組件。

除了上述規(guī)則外,還需要遵循TS的強類型規(guī)則。

審核編輯:湯梓紅

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

    關(guān)注

    0

    文章

    614

    瀏覽量

    28969
  • OpenHarmony
    +關(guān)注

    關(guān)注

    29

    文章

    3855

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    鴻蒙OS開發(fā)實例:【應(yīng)用狀態(tài)變量共享】

    平時在開發(fā)的過程中,我們會在應(yīng)用中共享數(shù)據(jù),在不同的頁面間共享信息。雖然常用的共享信息,也可以通過不同頁面中組件間信息共享的方式,但有時使用應(yīng)用級別的狀態(tài)管理會讓開發(fā)工作變得簡單。
    的頭像 發(fā)表于 04-03 15:09 ?1916次閱讀
    鴻蒙OS開發(fā)實例:【應(yīng)用<b class='flag-5'>狀態(tài)變量</b>共享】

    harmonyos開發(fā)者平臺

    使用@State、@Prop、@Link、@Watch、@Provide、@Consume管理頁面變量狀態(tài),實現(xiàn)對
    的頭像 發(fā)表于 05-06 16:02 ?1269次閱讀
    harmonyos開發(fā)者平臺

    HarmonyOS實踐之應(yīng)用狀態(tài)變量共享

    平時在開發(fā)的過程中,我們會在應(yīng)用中共享數(shù)據(jù),在不同的頁面間共享信息。雖然常用的共享信息,也可以通過不同頁面中組件間信息共享的方式,但有時使用應(yīng)用級別的狀態(tài)管理會讓開發(fā)工作變得簡單。 根
    發(fā)表于 12-27 09:48

    Harmony 鴻蒙頁面變量狀態(tài)管理

    頁面變量狀態(tài)管理 @State、@Prop、@Link、@Provide、@Consume、@ObjectLink、@Observed和
    發(fā)表于 01-24 20:04

    OpenHarmony應(yīng)用ArkUI 狀態(tài)管理開發(fā)范例

    本文轉(zhuǎn)載自《#2023盲盒+碼# OpenHarmony應(yīng)用ArkUI 狀態(tài)管理開發(fā)范例》,作者:zhushangyuan_ 本文根據(jù)橘子購物應(yīng)用,實現(xiàn)ArkUI中的狀態(tài)
    發(fā)表于 09-01 15:03

    OpenHarmony頁面UI狀態(tài)存儲:LocalStorage

    LocalStorage是頁面的UI狀態(tài)存儲,通過@Entry裝飾器接收的參數(shù)可以在頁面內(nèi)共享同一個LocalStorage實例。LocalStorage也可以在UIAbility內(nèi)
    發(fā)表于 10-17 17:01

    OpenHarmony狀態(tài)變量更改通知:@Watch裝飾器

    @Watch應(yīng)用于對狀態(tài)變量的監(jiān)聽。如果開發(fā)者需要關(guān)注某個狀態(tài)變量的值是否改變,可以使用@Watch為狀態(tài)變量設(shè)置回調(diào)函數(shù)。 說明: 從API version 9開始,該裝飾器支持在ArkTS卡片
    發(fā)表于 10-31 17:45

    動態(tài)電路的狀態(tài)變量分析

    動態(tài)電路的狀態(tài)變量分析􀂄 7.1 電路的狀態(tài)狀態(tài)變量􀂄 7.2 狀態(tài)方程及其列寫􀂄 7.3
    發(fā)表于 12-04 18:01 ?0次下載
    動態(tài)電路的<b class='flag-5'>狀態(tài)變量</b>分析

    狀態(tài)變量濾波器,狀態(tài)變量濾波器原理是什么?

    狀態(tài)變量濾波器,狀態(tài)變量濾波器原理是什么? 狀態(tài)變量濾波器,又稱多態(tài)變量濾波器,它可以分別從不同的點同時輸出高通、帶通、低通等,且
    發(fā)表于 03-24 14:24 ?6951次閱讀

    關(guān)于UI頁面狀態(tài):空白狀態(tài)

    設(shè)計師必須讓用戶在 首次使用 就有好的體驗!本篇就要探討設(shè)計師最常忽略的頁面 空白狀態(tài)(empty state) 頁面。 大多 app 平均會失去 77% 的用戶(用戶下載后三天)。更糟的是,在
    發(fā)表于 09-26 11:45 ?0次下載

    簡單實用的頁面狀態(tài)布局

    項目介紹 項目名稱:loadinglayout 所屬系列:openharmony第三方組件適配移植 功能:簡單實用的頁面狀態(tài)布局(content,loading,empty,error) 項目移植
    發(fā)表于 03-21 11:21 ?6次下載
    簡單實用的<b class='flag-5'>頁面</b>多<b class='flag-5'>狀態(tài)</b>布局

    基于openharmony適配移植可以下拉消失的頁面滑塊

    項目介紹 項目名稱:頁面滑塊 所屬系列:openharmony的第三方組件適配移植 功能:可以下拉消失的PageSlider 項目移植狀態(tài):主功能完成 調(diào)用差異:無 開發(fā)版本:sdk6,DevEco
    發(fā)表于 04-08 09:46 ?1次下載

    基于openharmony適配移植可從后臺動態(tài)變更頁面的組件

    項目介紹 項目名稱:Proteus 所屬系列:openharmony 第三方組件適配移植 功能:一個可從后臺動態(tài)變更頁面的組件 項目移植狀態(tài):主功能完成 調(diào)用差異:有(json數(shù)據(jù)中將布局名稱等更換
    發(fā)表于 04-08 10:24 ?4次下載

    Harmony 鴻蒙應(yīng)用變量狀態(tài)管理

    應(yīng)用變量狀態(tài)管理 在前面的章節(jié)中,已經(jīng)講述了如何管理頁面
    的頭像 發(fā)表于 01-24 21:30 ?800次閱讀
    Harmony 鴻蒙應(yīng)用<b class='flag-5'>級</b><b class='flag-5'>變量</b>的<b class='flag-5'>狀態(tài)</b><b class='flag-5'>管理</b>

    Harmony 鴻蒙頁面變量狀態(tài)管理

    頁面變量狀態(tài)管理 @State、@Prop、@Link、@Provide、@Consume、@ObjectLink、@Observed和
    的頭像 發(fā)表于 01-25 10:42 ?925次閱讀
    Harmony 鴻蒙<b class='flag-5'>頁面</b><b class='flag-5'>級</b><b class='flag-5'>變量</b>的<b class='flag-5'>狀態(tài)</b><b class='flag-5'>管理</b>